在csv中解析json

时间:2016-04-28 14:12:47

标签: python json csv

我有一个脚本,它给出了这样的输出csv,其中值没有写入第三列并将其留空。

name|fail|total|
test1|"{'fail': 0, 'total': 1}"|
test2|"{'fail': 0, 'total': 6}"|

我想将此输出写入csv,我希望输出3列csv。如何解析第二列并将值打印到两个不同的列?

name,fail,total
test1,0,1
test2,0,6

以下是我尝试使用python

将其写入csv的方法
with open('file.csv', 'w') as csvfile:
fieldnames = ['name', 'fail', 'total']
output = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter=',')
output.writeheader()
for k, v in lookupTable.iteritems():
    output.writerow({fieldnames[0]: k, fieldnames[1]: v})

任何人都可以帮助我。

2 个答案:

答案 0 :(得分:0)

从您得到的输出中我可以得出type(v)dict的结论,因此您需要解压缩其值。这是for循环,可以给你正确的结果。

keys = ['plan', 'Total', 'Time', 'name', 'createdDate']
fieldnames = ['plan', 'totalDirections', 'stopTime', 'customerName', 'createDate']
row = dict(zip(fieldnames, [data[k] for k in keys]))
output = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter=',')
output.writeheader()
output.writerow(row)

答案 1 :(得分:0)

@ user128285是的,这有效。我们能为json.dumps做同样的事吗?

我有另一个脚本,其中json.dumps的输出应该写入csv。

print json.dumps(data)打印输出,如下所示

{"plan": "yes", "Total": 0, "Time": "2016-04-11T00:00:00.000Z", "name": {"fail": "0", "total": "1", "cName": "red"}, "createdDate": "2016-04-11 05:23:57"}

以下是我在完成上述建议后尝试将上述输出解析为csv:

的方法
with open('customer_analysis', 'w') as csvfile:
fieldnames = ['plan', 'totalDirections', 'stopTime', 'customerName', 'createDate']
output = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter=',')
output.writeheader()
for a, b, c, d, e in json.dumps(data):
output.writerow({fieldnames[0]: a, fieldnames[1]: b, fieldnames[2]: c, fieldnames[3]: d['fail'], fieldnames[4]: d['total'], fieldnames[5]: e})

这是对的吗?或者如何纠正这个?