如何将此类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()时,我得到了:意外的字符“'”;期望为键值打开字符串引号(“)
答案 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"