Eval解析JSON

时间:2016-03-23 20:07:09

标签: json r parsing eval

我正在尝试在R中自动执行JSON解析(我必须从URL中删除" https://,因为我没有足够的声誉点):

library(Quandl)
library(jsonlite)

tmp <- 
fromJSON("www.quandl.com/api/v3/datasets.json?database_code=WIKI&page=2",flatten = TRUE)

page=X中的各种数字。上面的代码片段正确执行。为此,我试图使用eval(parse()),但我做错了。所以我有以下内容:

text1 <- 'fromJSON("www.quandl.com/api/v3/datasets.json?database_code=WIKI&page='
text2 <- '",flatten = TRUE)'
and to verify that I create the string properly:
> text1
[1] "fromJSON(\www.quandl.com/api/v3/datasets.json?database_code=WIKI&page="
> text2
[1] "\",flatten = TRUE)"
> cat(text1,n,text2,sep="")
fromJSON("www.quandl.com/api/v3/datasets.json?database_code=WIKI&page=2",flatten = TRUE)

但是当我尝试执行时:

koko <- eval(parse(text = cat(text1,n,text2,sep="")))

其中n<-2或任何其他整数,然后控制台冻结以下错误消息:

?
Error in parse(text = cat(text1, n, text2, sep = "")) : 
  <stdin>:1:4: unexpected '{'
1:  D_{
       ^ 

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

阅读the difference between paste and cat

cat只会打印到屏幕上,它不会返回任何内容。要创建字符串,您应该使用pastepaste0

例如,考虑

concat <- cat(text1, n, text2)
p <- paste0(text1, n, text2)

即使运行concat <- cat(text1, n, text2),它也会将输出打印到控制台,concat为空/ NULL

解决方案是使用paste0创建字符串表达式

text1 <- 'fromJSON("http://www.quandl.com/api/v3/datasets.json?database_code=WIKI&page='
text2 <- '",flatten = TRUE)'
n <- 2
koko <- eval(parse(text = (paste0(text1, n, text2))))

此外,您 需要才能使用eval,您可以直接使用paste0

text1 <- 'http://www.quandl.com/api/v3/datasets.json?database_code=WIKI&page='
n <- 2

koko <- fromJSON(paste0(text1, n), flatten=TRUE)