xmltodict:unparsing引发ValueError“文档必须正好具有一个根”-Python 3

问题描述

目标是将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","body": "Dont forget me this weekend!"}})))

非常感谢您的评论和建议。谢谢。

解决方法

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

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帮忙。