Python - 写入JSON文件时出现双引号问题

时间:2018-02-15 04:24:18

标签: python json double-quotes

我正在尝试将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"}
    ]
}

3 个答案:

答案 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"
        }
    ]
}