【发布时间】:2017-09-04 03:32:56
【问题描述】:
R 中的包在将 XML 转换为 JSON 时似乎无法正常工作。我已经尝试了带有“XML”包的 RJSONIO、rjson 和 jsonlite。我首先解析 XML 并使用 XML::xmlToList() 将其转换为列表,然后使用这 3 个包中的 toJSON() 将它们转换为 JSON。
我的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<votes>
<row Id="1" PostId="1" VoteTypeId="2" CreationDate="2014-05-13T00:00:00.000" />
<row Id="2" PostId="1" VoteTypeId="2" CreationDate="2014-05-13T00:00:00.000" />
<row Id="3" PostId="3" VoteTypeId="2" CreationDate="2014-05-13T00:00:00.000" />
</votes>
我的源代码:
library(XML)
library(RJSONIO)
library(rjson)
library(jsonlite)
xml_parse <- xmlTreeParse("~/Downloads/test.xml", useInternalNodes=TRUE)
xml_root <- xmlRoot(xml_parse)
xml_list <- xmlToList(xml_root, simplify = TRUE)
#jsonlite package
xml_jsonlite <- jsonlite::toJSON(xml_list)
write(xml_jsonlite, "test_jsonlite.json")
#RJSONIO package
xml_rjsonio <- RJSONIO::toJSON(xml_list)
write(xml_rjsonio, "test_rjsonio.json")
#rjson package
xml_rjson <- RJSONIO::toJSON(xml_list)
write(xml_rjson, "test_rjson.json")
从 RJSONIO 转换的 JSON 文件:
{
"row": {
"Id": "98",
"PostId": "10",
"VoteTypeId": "2",
"CreationDate": "2014-05-14T00:00:00.000"
},
"row": {
"Id": "99",
"PostId": "7",
"VoteTypeId": "5",
"UserId": "111",
"CreationDate": "2014-05-14T00:00:00.000"
}
}
由于字段名称重复,这显然是错误的。
从 jsonlite 转换的 JSON 文件:
{"row":["1","1","2","2014-05-13T00:00:00.000"],
"row.1":["2","1","2","2014-05-13T00:00:00.000"],
"row.2":["3","3","2","2014-05-13T00:00:00.000"]}
这很奇怪,因为应该只有一个字段名称“行”和子文档数组,而不是递增的“行”数组。它甚至没有字段名称。
从 rjson 转换的 JSON 文件:
{
"row": {
"Id": "1",
"PostId": "1",
"VoteTypeId": "2",
"CreationDate": "2014-05-13T00:00:00.000"
},
"row": {
"Id": "2",
"PostId": "1",
"VoteTypeId": "2",
"CreationDate": "2014-05-13T00:00:00.000"
}
}
理想的 JSON 文件应该是这样的:
{"votes" : {
"row" : [
{
"Id" : "1",
"PostId" : "1",
"VoteTypeId" : "2",
"CreationDate" : "2014-05-13T00:00:00.000"
},
{
"Id" : "2",
"PostId" : "1",
"VoteTypeId" : "2",
"CreationDate" : "2014-05-13T00:00:00.000"
}
]
}
}
寻找解决方案。任何帮助表示赞赏。
【问题讨论】:
-
显示您用于获取错误 JSON 字符串的代码以及来自您的 XML 转换的数据,以便我们帮助您正确解决问题。