rjson :: fromJSON()会错误地读取文件,而jsonlite :: fromJSON()会很好地读取文件。这是一个示例示例。
文件test.json内容:
{"name": "Sanjay",
"unit_price": 130848,
"amount": 11,
"up_to_data_sales": 45725}
jsonlite
fromJSON
的输出:
jsonlite::fromJSON("test.json")
$name
[1] "Sanjay"
$unit_price
[1] 130848
$amount
[1] 11
$up_to_data_sales
[1] 45725
但同样会在rjson
包中引发错误。
rjson::fromJSON("test.json")
Error in rjson::fromJSON("test.json") : parseTrue: expected to see 'true' - likely an unquoted string starting with 't'.
rjson
时启动jsonlite
软件包的原因是什么?答案 0 :(得分:2)
嗯:
stringdist::stringdist("rjson", "jsonlite")
## [1] 5
这是一个小小的差异。
但是,您的主张似乎不对:
library(magrittr)
rjson::fromJSON('{"name": "Sanjay",
"unit_price": 130848,
"amount": 11,
"up_to_data_sales": 45725}') %>% str()
## List of 4
## $ name : chr "Sanjay"
## $ unit_price : num 130848
## $ amount : num 11
## $ up_to_data_sales: num 45725
jsonlite::fromJSON('{"name": "Sanjay",
"unit_price": 130848,
"amount": 11,
"up_to_data_sales": 45725}') %>% str()
## List of 4
## $ name : chr "Sanjay"
## $ unit_price : int 130848
## $ amount : int 11
## $ up_to_data_sales: int 45725
除了jsonlite
使用数字的更小的数据类型外,它们都解析JSON。
因此您的文件存在问题,您未能在问题中予以披露。
进一步的错误主张
-rw-rw-r-- 1 bob staff 2690 Jul 30 2007 rjson_0.1.0.tar.gz
-rw-rw-r-- 1 bob staff 400196 Dec 3 2013 jsonlite_0.9.0.tar.gz
更不用说:
-rw-rw-r-- 1 bob staff 873843 Oct 4 2010 RJSONIO_0.3-1.tar.gz
rjson
首先。 (目录清单来自我旁边的CRAN镜像)。
您可以在这里实际阅读有关jsonlite
背后的原理和推动力:https://arxiv.org/abs/1403.2805(我从jsonlite
的CRAN页面中退出。
答案 1 :(得分:0)
1)为什么会出现错误? -错误是由于语法错误
# For example:
y <- rjson::fromJSON(file = "Input.json")
x <- jsonlite::fromJSON("Input.json")
2)jsonlite存在时启动rjson包的原因是什么?
首先,rjson在jsonlite之前启动,其次,它们读取文件的方式有所不同:
例如,考虑以下输入:
{ “ id”:1 “ prod_info”:[ { “ product”:“ xyz”, “ brand”:“ pqr”, “价格”:500 }, { “ product”:“ abc”, “ brand”:“ klm”, “价格”:5000 } ] }
上面输入中的prod_info是带有2个向量的列表。但是jsonlite以dataframe的形式读取它,而rjson以列表的形式读取
输出:
x
$id
[1] 1
$prod_info
product brand price
1 xyz pqr 500
2 abc klm 5000
y
$id
[1] 1
$prod_info
$prod_info[[1]]
$prod_info[[1]]$product
[1] "xyz"
$prod_info[[1]]$brand
[1] "pqr"
$prod_info[[1]]$price
[1] 500
$prod_info[[2]]
$prod_info[[2]]$product
[1] "abc"
$prod_info[[2]]$brand
[1] "klm"
$prod_info[[2]]$price
[1] 5000
class(x$prod_info)
[1] "data.frame"
class(y$prod_info)
[1] "list"
答案 2 :(得分:0)
这个问题已经回答了,但是关于这两个包的区别,我最近被一个问题咬了一口:空字典是如何处理的。
使用 rjson
> rjson::fromJSON("[]")
list()
> rjson::fromJSON("{}")
list()
然而,使用 jsonlite:
> jsonlite::fromJSON("[]")
list()
> jsonlite::fromJSON("{}")
named list()
也就是说,使用 rjson,您无法区分空列表和空字典。
JSON 的转换同时适用于两者,例如toJSON(structure(list(), names=character(0)))
产生 "{}"
。