【问题标题】:Json print output in python different from write output because of escaped characters由于转义字符,python 中的 Json 打印输出与写入输出不同
【发布时间】:2013-10-04 06:35:06
【问题描述】:

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

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

根据其他答案,我尝试在每次处理 json 转储时将 ensure_ascii 设置为 false。但这不起作用。

输入.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 文件中删除引号(在开头和结尾)和斜杠?

【问题讨论】:

    标签: python json csv


    【解决方案1】:

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

    直接写出来,不用再编码:

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

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

    【讨论】:

    • 谢谢。这很有意义。您的更改已解决问题。
    猜你喜欢
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2013-05-31
    • 2016-06-19
    • 1970-01-01
    • 2011-05-15
    • 2017-11-06
    相关资源
    最近更新 更多