json.dumps添加双引号和反斜杠

时间:2019-01-31 19:20:41

标签: python json

我正在将具有多个记录的csv文件转换为具有json数组的文件。解决方法是How to find last line in csv file when using DictReader。除文件中生成的json具有反斜杠(\)和双引号外,此方法工作正常。即它在转义字符串。例如:

  

{“测试名称”:“基本Tcp IPerf测试”,“ \”状态\””:“通过”,“ \”测试   开始时间\“”:“ 20190103 08:07:41.662”,“ \”测试结束时间\“”:   “ 20190103 08:08:44.051”,“ \” Throughput \“”:“ 2095.2746”,“   \“抖动\”“:”“,” \“丢包率%\”“:”“,” \“计算/虚拟机\”“:” SendVm   (x.x.x.x)“,” \“统计信息采样开始时间\”“:” 2019年1月3日   08:07:44“,” \“统计信息采样结束时间\”“:” 2019年1月3日   08:08:42“,” \“最小CPU \”“:” 0“,” \“最大CPU \”“:” 2“,” \“平均CPU \”“:   “ 1”,“ \”平均内存(MB)\“”:“ 7758”}

有没有办法写出json而没有转义? 代码:

csvfile = open('fiile.csv','r')
jsonfile = open('file.json','w')

reader = csv.DictReader(csvfile)

jsonfile.write(json.dumps(list(reader)))

1 个答案:

答案 0 :(得分:2)

您的csv文件格式似乎混乱了默认的csv解析器。特别是,您的列用逗号隔开:

           comma
           v
"Test Name", "Status"
            ^
            space

这使解析器假定逗号后的所有文本都是值的一部分,包括空格和引号。

一种可能的解决方案是在打开DictReader时为skipinitialspace参数指定一个值。

import csv
import json

csvfile = open('fiile.csv','r')
jsonfile = open('file.json','w')

reader = csv.DictReader(csvfile, skipinitialspace=True)
jsonfile.write(json.dumps(list(reader)))

然后,解析器应该理解空格和引号不是值的一部分。结果:

[{"Test Name": "Basic Tcp IPerf Test", "Status": "PASS", "Test Start Time": "20190103 08:07:41.662", "Test End Time": "20190103 08:08:44.051", "Throughput": "2095.2746", "Jitter": "", "Packet Loss %": "", "Compute/VM": "SendVm (x.x.x.x)", "Statistics Sampling Start Time": "03 Jan 2019 08:07:44", "Statistics Sampling End Time": "03 Jan 2019 08:08:42", "Min CPU": "0", "Max CPU": "2", "Avg CPU": "1", "Avg Memory (MB)": "7758"}]