我有多个文件,每个文件包含多个高度嵌套的json 行。一个这样的文件的两个第一行看起来像:
var subject = new Rx.Subject();
var subscription = subject.subscribe(
function (x) { console.log('onNext: ' + x); },
function (e) { console.log('onError: ' + e.message); },
function () { console.log('onCompleted'); });
subject.onNext(1);
// => onNext: 1
subject.onNext(2);
// => onNext: 2
subject.onCompleted();
// => onCompleted
subscription.dispose();
它们实际上是行,我只是用这种方式写它们以获得更多可见性。
我的问题如下:
有没有办法将所有这些文件转换为一个(或多个,即每个文件一个)csv / excel ...?
是否有任何简单的方法,不需要在Python中编写数十个或数百行特定于我的文件,将所有这些文件转换为一个(或多个),即每个文件一个)csv / excel ...?一个例子是使用外部库,脚本......来处理这个特定的任务,无论字段的名称如何。
陷阱是某些元素不会出现在每一行中。例如,对于" i" 键,我们在第一个json中有3个字段(l,c,p),在第二个json中有3个字段(c,y,z )。理想情况下,csv应包含尽可能多的列字段(例如evv.w.2.il,evv.w.2.ic,evv.w.2.ip,evv.w.2.iy,evv.w。 2.iz)存在每个csv行有(多个)空值的风险。
此示例的可能csv输出将包含以下列:
{
"u":"28",
"evv":{
"w":{
"1":400,
"2":{
"i":[{
"l":14,
"c":"7",
"p":"4"
}
]
}
}
}
}
{
"u":"29",
"evv":{
"w":{
"3":400,
"2":{
"i":[{
"c":14,
"y":"7",
"z":"4"
}
]
}
}
}
}
欢迎任何想法/参考:)
由于
答案 0 :(得分:1)
请检查此(python3)解决方案是否适合您。
import json
import csv
with open('test.json') as data_file:
with open('output.csv', 'w', newline='') as fp:
for line in data_file:
data = json.loads(line)
output = [[data['u'], data['evv']['w'].get('1'), data['evv']['w'].get('3'),
data['evv']['w'].get('2')['i'][0].get('l'), data['evv']['w'].get('2')['i'][0].get('c'),
data['evv']['w'].get('2')['i'][0].get('p'), data['evv']['w'].get('2')['i'][0].get('y'),
data['evv']['w'].get('2')['i'][0].get('z')]]
a = csv.writer(fp, delimiter=',')
a.writerows(output)
<强> test.json 强>
{ "u": "28", "evv": { "w": { "1": 400, "2": { "i": [{ "l": 14, "c": "7", "p": "4" }] } } }}
{"u":"29","evv":{ "w":{ "3":400, "2":{ "i":[{ "c":14, "y":"7", "z":"4" } ] } } }}
<强>输出强>
python3 pyprog.py
dac@dac-Latitude-E7450 ~/P/pyprog> more output.csv
28,400,,14,7,4,,
29,,400,,14,,7,4
答案 1 :(得分:1)
不,没有通用程序可以完全满足您的要求。
但是,您可以编写一个执行此操作的Python程序。
这个程序可能会做你想要的。它没有任何特定于您的密钥名称的代码,但它特定于您的文件格式。
x