1

我有以下 data.frame,其中有一列名为“json”和两行 JSON 数据:

df <- data.frame(json = c('{"client":"ABC Company","totalUSD":7110.0000,"durationDays":731,"familySize":4,"assignmentType":"Long Term","homeLocation":"Australia","hostLocation":"United States","serviceName":"Service ABC","homeLocationGeoLat":-25.274398,"homeLocationGeoLng":133.775136,"hostLocationGeoLat":37.09024,"hostLocationGeoLng":-95.712891}', '{"client":"ABC Company","totalUSD":7110.0000,"durationDays":731,"familySize":4,"assignmentType":"Long Term","homeLocation":"Australia","hostLocation":"United States","serviceName":"Service XYZ","homeLocationGeoLat":-25.274398,"homeLocationGeoLng":133.775136,"hostLocationGeoLat":37.09024,"hostLocationGeoLng":-95.712891}'))

我正在尝试使用 rjson 包中的 fromJSON 将 JSON 解析为 data.frame。

我将该列转换为字符类型,然后尝试解析:

> df$json <- as.character(df$json)
> final <- fromJSON(json_str = df$json)

但是,它似乎只给了我 JSON 的第一行,而我希望有 2 行。

如何从 df$json 将 JSON 解析为 data.frame?

4

1 回答 1

7

您可能需要此练习的结果数据框,因此:

do.call(rbind.data.frame, lapply(df$json, rjson::fromJSON))

##         client totalUSD durationDays familySize assignmentType homeLocation  hostLocation serviceName homeLocationGeoLat
## 2  ABC Company     7110          731          4      Long Term    Australia United States Service ABC           -25.2744
## 21 ABC Company     7110          731          4      Long Term    Australia United States Service XYZ           -25.2744
##    homeLocationGeoLng hostLocationGeoLat hostLocationGeoLng
## 2            133.7751           37.09024          -95.71289
## 21           133.7751           37.09024          -95.71289

完全相同的结果将来自:

do.call(rbind.data.frame, lapply(df$json, jsonlite::fromJSON))
do.call(rbind.data.frame, lapply(df$json, RJSONIO::fromJSON))
于 2015-08-19T16:33:15.207 回答