我正在尝试将xml转换为JSON(下面提供了代码的精简版本)。
我面临的问题是标签,它可以有多个值(例如下面的例子)。我不能直接将它作为dict,因为键(NAME)可以有多个值。代码Vs产生的输出预期输出如下所示。
python脚本:
import json
mylist = ['"Event" : "BATCHS01-wbstp01"', '"Event" : "BATCHS01-wbstrt01"']
tmpdict = {}
tmpdict['Events'] = mylist
with open('test.json','w') as fp:
json.dump(tmpdict,fp,indent=4, sort_keys=False)
输出已生成:
{
"Events": [
"\"Event\" : \"BATCHS01-wbstp01\"",
"\"Event\" : \"BATCHS01-wbstrt01\""
]
}
预期输出:
{
"Events": [
{"Event" : "BATCHS01-wbstp01"},
{"Event" : "BATCHS01-wbstrt01"}
]
}
答案 0 :(得分:0)
问题是你的mylist
是一个字符串数组而不是一个地图对象数组。
你需要删除外部引用来实现它:
mylist = [{"Event" : "BATCHS01-wbstp01"}, {"Event" : "BATCHS01-wbstrt01"}]
我不明白为什么你不能用XML生成这个结构。无论“键”(NAME)是否可以包含多个值,它都相当简单。
答案 1 :(得分:0)
您可以先将数据转换为有效的JSON,然后将JSON转储到字符串或文件中,以挽救您的数据:
tmpdict = {"Events" : [json.loads('{' + item + '}') for item in mylist]}
json.dumps(tmpdict)
'{"Events": [{"Event": "BATCHS01-wbstp01"}, {"Event": "BATCHS01-wbstrt01"}]}'
答案 2 :(得分:0)
您可以先将XML片段转换为dict,如:
tmpdict['Events'] = [json.loads('{%s}' % x) for x in mylist]
import json
mylist = ['"Event" : "BATCHS01-wbstp01"', '"Event" : "BATCHS01-wbstrt01"']
tmpdict = {}
tmpdict['Events'] = [json.loads('{%s}' % x) for x in mylist]
with open('test.json', 'w') as fp:
json.dump(tmpdict, fp, indent=4, sort_keys=False)
{
"Events": [
{
"Event": "BATCHS01-wbstp01"
},
{
"Event": "BATCHS01-wbstrt01"
}
]
}