【问题标题】:xmltodict: unparsing raises ValueError('Document must have exactly one root.') - Python 3xmltodict: 解析引发 ValueError('Document 必须只有一个根。') - Python 3
【发布时间】:2021-01-26 01:47:00
【问题描述】:

目标是将 JSON 转换为 XML
该代码读取 JSON.txt,将其转换为 XML 并将其写入 JSON_to_xml.txt。下面的代码在解析时返回一个值错误,给出一个文件有多个根的错误 即使它只有一个根。

import xmltodict
import json
import sys

sys.stdout = open('JSON_to_XML.txt', 'w')
print(json.dumps(xmltodict.unparse(open("JSON.txt", "r").read()))) 
sys.stdout.close()

JSON.txt的内容如下,

{"note": {"to": "Tove", "from": "Jani", "heading": "Reminder", "body": "Dont forget me this weekend!"}}

如果我只是将文件的内容复制到脚本中,如下所示,它会以正确的 XML 格式提供输出。

import xmltodict
import json
                                                                
print(json.dumps(xmltodict.unparse(
    {"note": {"to": "Tove", "from": "Jani", "heading": "Reminder", "body": "Dont forget me this weekend!"}})))

我们非常感谢您的 cmets 和建议。谢谢。

【问题讨论】:

  • 您的 JSON.txt 可能是一个列表(这是有效的 JSON) - 您可以将前几行放入您的问题中吗?
  • 您好 Barny, JSON:txt 的内容与第二个代码块上的内容相同。在此处添加以供您参考。 {“note”:{“to”:“Tove”,“from”:“Jani”,“heading”:“Reminder”,“body”:“这个周末别忘了我!”}}

标签: python json xml xmltodict xml-to-json


【解决方案1】:

这里将字典传递给函数,这是正确的方法。

print(json.dumps(xmltodict.unparse({"note": {"to": "Tove", "from": "Jani", "heading": "Reminder", "body": "Dont forget me this weekend!"}})))

但是在这里 read() 的结果是一个 JSON 字符串,并且被传递到函数中。因此,在传递之前应该将其转换为字典。

import json
import sys

sys.stdout = open('JSON_to_XML.txt', 'w')
print(json.dumps(xmltodict.unparse(open("JSON.txt", "r").read()))) 
sys.stdout.close()

所以解决办法是,

import json
import sys

# JSON to XML

f = open("JSON.txt")

sys.stdout = open('JSON_to_XML.txt', 'w')
print(json.dumps(xmltodict.unparse(json.load(f))))
sys.stdout.close()

谢谢你,迈克:https://github.com/mpf82 的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2015-03-15
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多