2014-11-03 93 views
1

假设我有以下json对象数组,我想将它们转换为tsv格式。将json对象数组转换为tsv(python)

[ 
    { 
    "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 
+0

你尝试过什么?当你导入JSON对象时,它的格式应该是[csv的DictWriter](https://docs.python.org/2/library/csv.html#csv.DictWriter)所要求的格式。 – whereswalden 2014-11-03 03:10:52

回答

3

的第一步是从JSON字符串转换为使用Python对象的阵列,例如,json.loads

最后一步是使用例如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) 
0

一个有点重手的方法是使用熊猫

> 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