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'.
1.为什么会出现这个错误?
1.在jsonlite
存在的情况下推出rjson
包的原因是什么?
4条答案
按热度按时间3yhwsihp1#
井:
这是一个适度的差异开始。
然而,你的说法似乎是错误的:
除了
jsonlite
使用更小的数字数据类型之外,它们都可以很好地解析JSON。所以你的档案中有一个问题你没有在问题中披露。
另一个不正确的Assert
更不用说:
rjson
排在第一位。(目录列表来自坐在我旁边的CRAN镜子)。你可以在这里阅读
jsonlite
背后的原理和动力:https://arxiv.org/abs/1403.2805(我从CRAN页面上获得了jsonlite
。falq053o2#
1)为什么会出现错误?-错误是由于语法错误
如果未给出“file=”命令,rjson不会读取文件,而使用Jsonlite阅读文件时,则不需要此命令
2)在jsonlite存在的时候推出rjson包的原因是什么?
首先,rjson是在jsonlite之前推出的,其次,它们读取文件的方式有所不同:
例如,考虑以下输入:
{“id”:1,“prod_info”:[ {“产品”:“xyz”,“brand”:“pqr”,“price”:500 },{“product”:“abc”,“brand”:“klm”,“price”:5000个
上面输入的prod_info是一个有2个向量的列表,但是jsonlite是以dataframe的形式读取的,而rjson是以列表的形式读取的
输出:
kcugc4gi3#
这个问题已经得到了回答,但是关于两个包之间的差异,我最近被一个咬了一口:如何处理空字典。
关于rjson
而对于jsonlite:
也就是说,使用rjson,你无法区分空列表和空字典。
然而,到JSON的转换对两者都有效,例如
toJSON(structure(list(), names=character(0)))
产生"{}"
。ilmyapht4#
这个区别让我选择了jsonlite:
然而: