我有一些代码将一些JSON从API调用转换为Python列表,如下所示:
import json as js
def flatten(listText):
def _flatten(item):
if isinstance(item, dict):
for value in item.values():
yield from _flatten(value)
else:
yield item
return [list(_flatten(d)) for d in listText]
jsonText = '[{"stationID":"ABCD123","obsTimeUtc":"ABCD123-ABCD123-ABCD123:ABCD123:ABCD123","obsTimeLocal":"ABCD123-ABCD123-ABCD123 ABCD123:ABCD123:ABCD123","neighborhood":"ABCD123","softwareType":"EasyWeatherV1.4.6","country":"AU","solarRadiation":0,"lon":0,"realtimeFrequency":null,"epoch":0,"lat":0,"uv":0,"winddir":0,"humidity":0,"qcStatus":0,"imperial":{"temp":0,"heatIndex":0,"dewpt":0,"windChill":0,"windSpeed":0,"windGust":0,"pressure":0,"precipRate":0,"precipTotal":0,"elev":0}}]'
listText = js.loads(jsonText)
print(flatten(listText))
这非常有效,但是JSON已更改,因此字符串现在包装在{“observations:}中,如下所示:
{"observations":[{"stationID":"ABCD123","obsTimeUtc":"ABCD123-ABCD123-ABCD123:ABCD123:ABCD123","obsTimeLocal":"ABCD123-ABCD123-ABCD123 ABCD123:ABCD123:ABCD123","neighborhood":"ABCD123","softwareType":"EasyWeatherV1.4.6","country":"AU","solarRadiation":0,"lon":0,"realtimeFrequency":null,"epoch":0,"lat":0,"uv":0,"winddir":0,"humidity":0,"qcStatus":0,"imperial":{"temp":0,"heatIndex":0,"dewpt":0,"windChill":0,"windSpeed":0,"windGust":0,"pressure":0,"precipRate":0,"precipTotal":0,"elev":0}}]}
因此,与其返回这样的列表,不如:
[['ABCD123', 'ABCD123:ABCD123:ABCD123', 'ABCD123-ABCD123-ABCD123 ABCD123:ABCD123:ABCD123', 'ABCD123', 'EasyWeatherV1.4.6', 'AU', 0, 0, None, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
它只是返回:
[['observations']]
如何更改代码,使其与新的Json格式一起工作
您只需选择与
observations
字段对应的值,如下所示:这将提供所需的输出
相关问题 更多 >
编程相关推荐