由于转义字符,python中的Json打印输出与写输出不同

时间:2013-09-27 20:34:35

标签: python json csv

我有一个管道分隔文件我试图使用python(2.7)转换为json。 代码读取文本文件,根据分隔符转换它,然后将其转换为json。

当我运行代码时,终端窗口中的输出是正确的。但是,当我写入文件时,转义斜杠\将被添加到输出中。并且没有转义的引号被添加到输出文件的开头和结尾。

基于其他答案,我每次处理json转储时都尝试将ensure_ascii设置为false。但那不起作用。

input.txt中:

392|0|9

代码:

import csv
import json

f = open( 'input.txt', 'rU')
reader = csv.DictReader( f, fieldnames = ( "A", "B", "C" ), delimiter='|')
out = json.dumps([ row for row in reader ], ensure_ascii=False)
print out
with open('data.json', 'w') as outfile:
  json.dump(out, outfile, ensure_ascii=False)

终端输出:

[{"A": "392", "C": "9", "B": "0"}]

data.json中的输出:

"[{\"A\": \"392\", \"C\": \"9\", \"B\": \"0\"}]"

我是Python的新手。我该怎么做才能删除引号(在开头和结尾)和.json文件中的斜杠?

1 个答案:

答案 0 :(得分:9)

您正在将数据编码为JSON 两次out 已经 JSON编码,但您可以通过将JSON字符串转储到outfile来再次对其进行编码。

只需将其写出来,无需再次编码:

with open('data.json', 'w') as outfile:
    outfile.write(out)

请删除ensure_ascii=False选项,因为json.dumps()会生成 unicode 值,这需要您将它们编码为合适的编解码器(读取,UTF之一)你写的文件。