如何在Python中将json转换为列表?

2024-10-03 02:42:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些代码将一些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格式一起工作


Tags: 代码injson列表forvaluedefjs
1条回答
网友
1楼 · 发布于 2024-10-03 02:42:10

您只需选择与observations字段对应的值,如下所示:

listText = js.loads(jsonText)['observations']

这将提供所需的输出

相关问题 更多 >