Python 将JSON写入文件-格式错误?

Python 将JSON写入文件-格式错误?,python,json,Python,Json,在Python中,我试图获取一个XML文件,处理它,然后将数据输出到JSON。XML处理工作正常,但我在正确格式化JSON时遇到了问题。输出文件看起来更像一个包含字典的列表,这很有意义,因为代码实际上就是这样做的。如何使其成为正确的JSON文件 filename = 'data.json' d = [] for elem in ET.fromstring(data).findall('.//table/row'): field1 = elem.get('field1')

Python
中,我试图获取一个
XML
文件,处理它,然后将数据输出到
JSON
。XML处理工作正常,但我在正确格式化JSON时遇到了问题。输出文件看起来更像一个包含字典的列表,这很有意义,因为代码实际上就是这样做的。如何使其成为正确的JSON文件

filename = 'data.json'

d = []

for elem in ET.fromstring(data).findall('.//table/row'):
        field1 = elem.get('field1')
        field2 = elem.get('field2')
        field3 = elem.get('field3')
        field4 = elem.get('field4')
        l = {'field1' : field1, 
             'field2' : field2, 
             'field3' : field3, 
             'field4' : field4}
        d.append(l)

f_out = open(filename, 'w')
json.dump(d, f_out)

f_out.close()
输出文件如下所示:

[{"field1": "field1", "field2": "field2", "field3": "field3", "field4": "field4"}, ... {"field1": "field1", "field2": "field2", "field3": "field3", "field4": "field4"}]
当我期望它看起来像:

{"field1": "field1", "field2": "field2", "field3": "field3", "field4": "field4"}, ... {"field1": "field1", "field2": "field2", "field3": "field3", "field4": "field4"}
json.dump()

例如:

json.dump({'1': 2, '3': 4}, f_out, indent=4, separators=(',', ': '))
结果:

{
    "1": 2,
    "3": 4
}
{"field2": "b", "field3": "c", "field1": "a", "field4": "d"}
{"field2": "2", "field3": "3", "field1": "1", "field4": "4"}
请参见

根据,Redshift COPY命令在其输入文件中需要一个JSON对象序列,在其可选的JSONPath文件中需要一个JSON对象序列

要创建这样的序列,请多次调用
json.dump()

from xml.etree import ElementTree as ET
import json


data = '''
<root><table>
  <row field1="a" field2="b" field3="c" field4="d"/>
  <row field1="1" field2="2" field3="3" field4="4"/>
</table></root>'''

filename = 'data.json'
f_out = open(filename, 'w')
for elem in ET.fromstring(data).findall('.//table/row'):
        field1 = elem.get('field1')
        field2 = elem.get('field2')
        field3 = elem.get('field3')
        field4 = elem.get('field4')
        l = {'field1' : field1,
             'field2' : field2,
             'field3' : field3,
             'field4' : field4}
        json.dump(l, f_out)
        f_out.write('\n')

f_out.close()

当您尝试添加json.dump时,您的代码看起来很好。我怀疑输出是“正确的JSON文件”。请显示您从该程序获得的输出,以及您期望的输出。您正在编写
d
,这是一个列表,用JSON表示为
[item1,item2,item3]
@JohnGordon也许这是一个更好的问题-如果我需要输出格式正确的JSON,实现这一点的合适方法是什么?您正在编写的文件是正确的JSON。是不是有别的东西(也许是另一个程序)告诉你它错了?