繁体   English   中英

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

[英]How to convert json to a list in 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 格式?

您需要做的就是选择与observations字段对应的值,如下所示:

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

这给出了您需要的 output

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM