Python 如何将JSON转换为CSV?(支持UTF-8)

Python 如何将JSON转换为CSV?(支持UTF-8),python,python-2.7,utf-8,Python,Python 2.7,Utf 8,之前有一个问题,有很多答案,但是没有一个解释如何转换非拉丁数据 假设我有一个JSON文件,如下所示: [ {"id":123,"FullName":"Иванов Иван Иванович"}, {"id":124,"FullName":"Петров Петр Петрович"} ] 我尝试使用这样的脚本: #!/usr/bin/env python2.

之前有一个问题,有很多答案,但是没有一个解释如何转换非拉丁数据

假设我有一个JSON文件,如下所示:

[
    {"id":123,"FullName":"Иванов Иван Иванович"},
    {"id":124,"FullName":"Петров Петр Петрович"}
]
我尝试使用这样的脚本:

#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

import sys
import codecs
import json
import unicodecsv as csv

if __name__ == '__main__':
    fin = codecs.open(sys.argv[1], encoding='utf-8')
    data = json.load(fin)
    fin.close()

    with codecs.open('test.csv', encoding='utf-8', mode='wb') as csv_file:
        w = csv.writer(csv_file, encoding='utf-8')
        w.writerow(data[0].keys())  # header row
    
        for row in data:
            w.writerow(row.values())
这给了我以下错误:

UnicodeDecodeError:“ascii”编解码器无法解码位置中的字节0xd0 32:序号不在范围内(128)


首先,不清楚位置32处有什么,但最有趣的问题是是否有办法将UTF-8编码字符串保存到CSV文件。

给定
test.json
(注释中有引号和逗号):

这项工作:

#!/usr/bin/env python2.7

import json
import unicodecsv as csv

with open('test.json','rb') as fin:
    data = json.load(fin)

with open('test.csv','wb') as csv_file:
    w = csv.writer(csv_file, encoding='utf-8-sig')
    w.writerow(data[0].keys())  # header row
    for row in data:
        w.writerow(row.values())
json
模块采用UTF-8编码

unicodesv
获取以二进制模式打开的文件,并使用实例化
writer
时指定的编码进行解码

如果.CSV将在Excel中打开,则使用
utf-8-sig
,否则
utf8
将起作用

输出:

FullName,id
"Иванов, ""Иван"" Иванович",123
Петров Петр Петрович,124
在Excel中:

FullName,id
"Иванов, ""Иван"" Иванович",123
Петров Петр Петрович,124