Преобразование массива объектов 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

person user1424739    schedule 03.11.2014    source источник
comment
Что вы пробовали? Формат, в котором он появится, когда вы импортируете объект JSON, должен иметь точный формат DictWriter csv ожидает.   -  person whereswalden    schedule 03.11.2014


Ответы (2)


Первый шаг — преобразовать строку 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)
person Robᵩ    schedule 03.11.2014

Несколько жестким подходом было бы использование 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
person Erik    schedule 12.08.2015