我有这个JSON
。它是一个API请求输出。(实际上是一个4个JSON
的列表,存储在一个名为responselist
的变量中)。目标是解析它并将其存储到一个 Dataframe 中,所以我的想法是循环到每个responselist
的response
。JSON
看起来像这样:
[{'pagination': {'limit': 100, 'offset': 0, 'count': 100, 'total': 286},
'data': [{'flight_date': '2022-12-25',
'flight_status': 'scheduled',
'departure': {'airport': 'Marseille Provence Airport',
'timezone': 'Europe/Paris',
'iata': 'MRS',
'icao': 'LFML',
'terminal': '1B',
'gate': None,
'delay': None,
'scheduled': '2022-12-25T16:00:00+00:00',
'estimated': '2022-12-25T16:00:00+00:00',
'actual': None,
'estimated_runway': None,
'actual_runway': None},
'arrival': {'airport': 'Ste Catherine',
'timezone': 'Europe/Paris',
'iata': 'CLY',
'icao': 'LFKC',
'terminal': None,
'gate': None,
'baggage': None,
'delay': None,
'scheduled': '2022-12-25T17:00:00+00:00',
'estimated': '2022-12-25T17:00:00+00:00',
'actual': None,
'estimated_runway': None,
'actual_runway': None},
'airline': {'name': 'Air Corsica', 'iata': 'XK', 'icao': 'CCM'},
'flight': {'number': '351',
'iata': 'XK351',
'icao': 'CCM351',
'codeshared': None},
'aircraft': None,
'live': None},
{'flight_date': '2022-12-25',
'flight_status': 'scheduled',
'departure': {'airport': 'Marseille Provence Airport',
'timezone': 'Europe/Paris',
'iata': 'MRS',
'icao': 'LFML',
'terminal': '1B',
'gate': None,
'delay': 42,
'scheduled': '2022-12-25T10:50:00+00:00',
'estimated': '2022-12-25T10:50:00+00:00',
'actual': '2022-12-25T11:31:00+00:00',
'estimated_runway': '2022-12-25T11:31:00+00:00',
'actual_runway': '2022-12-25T11:31:00+00:00'},
'arrival': {'airport': 'Campo Dell Oro',
'timezone': 'Europe/Paris',
'iata': 'AJA',
'icao': 'LFKJ',
'terminal': '2',
'gate': None,
'baggage': None,
'delay': 23,
'scheduled': '2022-12-25T11:55:00+00:00',
'estimated': '2022-12-25T11:55:00+00:00',
'actual': None,
'estimated_runway': None,
'actual_runway': None},
'airline': {'name': 'Air Corsica', 'iata': 'XK', 'icao': 'CCM'},
'flight': {'number': '151',
'iata': 'XK151',
'icao': 'CCM151',
'codeshared': None},
'aircraft': None,
'live': None},
[...]
}]}
下面的代码用于将departure
节点存储到一列 Dataframe 中:
for response in responselist:
data.extend(
flight_data.get('departure').get('airport')
for flight_data in response.get('data')
cols=['departures']
result = pd.DataFrame(data, columns=cols)
result
我们的想法是解析JSON
的其他节点来完成 Dataframe 。我认为这应该将timezone
节点存储到第二列中,但它返回invalid syntax
:
for response in responselist:
data.extend(
flight_data.get('departure').get('airport')
for flight_data in response.get('data')
data.extend(
flight_data.get('departure').get('timezone')
for flight_data in response.get('data')
cols=['departures', 'timezone']
result = pd.DataFrame(data, columns=cols)
result
1条答案
按热度按时间iezvtpos1#
它抛出了无效语法,因为缩进大小不同,并且for循环没有用
:
闭合。这修复了这些问题,但仍然不是您所寻找的。正如@tomerar所提到的,利用
json_normalize()
来代替for循环,会更高效: