将JSON对象数组转换为TSV(Python)

4 投票
2 回答
9504 浏览
提问于 2025-05-01 05:40

假设我有一个包含多个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)

撰写回答