将JSON数据转换为data.frame

时间:2017-11-20 02:44:34

标签: json r

如何将此类JSON数据转换为data.frame:

library("rjson")
fromJSON("[{'id': 18, 'name': 'Drama'}, {'id': 28, 'name': 'Action'}, {'id': 10749, 'name': 'Romance'}]")
  

fromJSON错误(“[{'id':18,'name':'Drama'},{'id':28,'name':'Action'},{'id':10749,'name ':'浪漫'}]“):     意外的字符“'”;期望为键值打开字符串引号(“)   当我使用fromJSON()时,我得到了:意外的字符“'”;期望为键值打开字符串引号(“)

1 个答案:

答案 0 :(得分:3)

要使JSON有效,它需要在JSON字符串中使用双引号(请参阅this question以供参考)。因此,您还需要围绕它的单引号使其成为R中的有效字符串。

你可以使用r2evans提供的那个很棒的正则表达式来交换单引号和双引号

## this is your invalid string
js <- "[{'id': 18, 'name': 'Drama'}, {'id': 28, 'name': 'Action'}, {'id': 10749, 'name': 'Romance'}]"

## convert it to a valid string
js <- gsub("QUUX", "'", gsub("'", '"', gsub('"', "QUUX", js)))

或者通过使用?chartr功能(感谢thelatemail)

js <- chartr("\'\"","\"\'",js)

然后,大多数JSON解析库应该可以工作,例如,

使用 jsonlite 会为您提供 data.frame

df <- jsonlite::fromJSON(js)

df
#     id    name
#1    18   Drama
#2    28  Action
#3 10749 Romance

使用 rjson 会为您提供列表

rjson::fromJSON(js)

[[1]]
[[1]]$id
[1] 18

[[1]]$name
[1] "Drama"


[[2]]
[[2]]$id
[1] 28

[[2]]$name
[1] "Action"


[[3]]
[[3]]$id
[1] 10749

[[3]]$name
[1] "Romance"