У меня есть несколько файлов JSON, которые нужно проанализировать в CSV.
Ниже приведен мой код:
import json
from collections import defaultdict
def flatten_json1(y):
out = defaultdict(list)
def flatten(x, name=''):
if type(x) is dict:
for a in x:
flatten(x[a], a )
elif type(x) is list:
i = 0
for a in x:
flatten(a, name )
i += 1
else:
out[name].append(x)
flatten(y)
return out
import json
from pprint import pprint
with open('testjson.json') as f:
data = json.load(f)
pprint(flatten_json1(data))
И это пример JSON, который я использую:
{
"id": "0001",
"type": "donut",
"name": "Cake",
"ppu": 0.55,
"batters":
{
"batter":
[
{ "id": "1001", "type": "Regular" },
{ "id": "1002", "type": "Chocolate" },
{ "id": "1003", "type": "Blueberry" },
{ "id": "1004", "type": "Devil's Food" }
]
},
"topping":
[
{ "id": "5001", "type": "None" },
{ "id": "5002", "type": "Glazed" },
{ "id": "5005", "type": "Sugar" },
{ "id": "5007", "type": "Powdered Sugar" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5003", "type": "Chocolate" },
{ "id": "5004", "type": "Maple" }
]
}
При запуске он дает мне следующий вывод:
defaultdict(<type 'list'>, {u'type': [u'None', u'Glazed', u'Sugar',
u'Powdered Sugar', u'Chocolate with Sprinkles', u'Chocolate', u'Maple',
u'Regular', u'Chocolate', u'Blueberry', u"Devil's Food", u'donut'],
u'id': [u'5001', u'5002', u'5005', u'5007', u'5006', u'5003', u'5004',
u'1001', u'1002', u'1003', u'1004', u'0001'], u'ppu': [0.55], u'name':
[u'Cake']})
Но, как вы можете видеть, атрибут «ppu» и «name» не имеет размера списка, равного двум другим клавишам.
Итак, как я могу сделать это, как показано ниже:
defaultdict(<type 'list'>, {u'type': [u'None', u'Glazed', u'Sugar',
u'Powdered Sugar', u'Chocolate with Sprinkles', u'Chocolate', u'Maple',
u'Regular', u'Chocolate', u'Blueberry', u"Devil's Food", u'donut'],
u'id': [u'5001', u'5002', u'5005', u'5007', u'5006', u'5003', u'5004',
u'1001', u'1002', u'1003', u'1004', u'0001'], u'ppu':
[0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55,0.55], u'name': [u'Cake’,u'Cake'u'Cake'u'Cake'u'Cake'u'Cake'u'Cake'u'Cake'u'Cake'u'Cake'u'Cake'u'Cake']})
Который имеет длину 12 каждый.Пожалуйста, помогите.
Заранее спасибо.