将json对象数组转换为tsv(python)

时间:2014-11-03 02:57:35

标签: python arrays json tsv

假设我有以下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 :(得分:6)

第一步是使用例如json.loads从JSON字符串转换为Python对象数组。

最后一步是使用例如csv.DictWriter将Python对象写入文件。

这是一个完整的程序,演示了如何从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)

答案 1 :(得分: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