将JSON对象数组转换为TSV(Python)
假设我有一个包含多个json对象的数组,我想把它们转换成tsv格式。
[
{
"x": "1",
"y": "2",
"z": "3"
},
{
"x": "6",
"y": "7",
"z": "B"
}
]
有没有人知道一个好的解决办法?(Python的json模块只能读取单个json对象,但怎么读取一个json对象的数组呢?)
x<TAB>y<TAB>z
1<TAB>2<TAB>3
6<TAB>7<TAB>8
2 个回答
0
一种比较直接的方法是使用Pandas这个工具。
> import sys
> import pandas as pd
> table = pd.read_json('''[
{
"x": "1",
"y": "2",
"z": "3"
},
{
"x": "6",
"y": "7",
"z": "B"
}
]''', orient='records')
> table.to_csv(sys.stdout, sep='\t', index=False)
x y z
1 2 3
6 7 B
8
第一步是把一个JSON格式的字符串转换成Python对象的数组,可以使用比如说json.loads
这个方法。
最后一步是把这些Python对象写入一个文件,可以用比如说csv.DictWriter
这个工具。
下面是一个完整的程序,演示了如何把JSON字符串转换成以制表符分隔的值文件。
import json
import csv
j = json.loads(r'''[
{
"x": "1",
"y": "2",
"z": "3"
},
{
"x": "6",
"y": "7",
"z": "B"
}
]''')
with open('output.tsv', 'w') as output_file:
dw = csv.DictWriter(output_file, sorted(j[0].keys()), delimiter='\t')
dw.writeheader()
dw.writerows(j)