访问 JSON 元素

新手上路,请多包涵

我从 URL 获取天气信息。

 weather = urllib2.urlopen('url')
wjson = weather.read()

我得到的是:

 {
  "data": {
     "current_condition": [{
        "cloudcover": "0",
        "humidity": "54",
        "observation_time": "08:49 AM",
        "precipMM": "0.0",
        "pressure": "1025",
        "temp_C": "10",
        "temp_F": "50",
        "visibility": "10",
        "weatherCode": "113",
        "weatherDesc": [{
            "value": "Sunny"
        }],
        "weatherIconUrl": [{
            "value": "http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png"
        }],
        "winddir16Point": "E",
        "winddirDegree": "100",
        "windspeedKmph": "22",
        "windspeedMiles": "14"
    }]
 }
}

如何访问我想要的任何元素?

如果我这样做: print wjson['data']['current_condition']['temp_C'] 我收到错误消息:

字符串索引必须是整数,而不是 str。

原文由 doniyor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 607
2 个回答
import json
weather = urllib2.urlopen('url')
wjson = weather.read()
wjdata = json.loads(wjson)
print wjdata['data']['current_condition'][0]['temp_C']

你从 url 得到的是一个 json 字符串。而且你不能直接用索引解析它。您应该通过 json.loads 将其转换为字典,然后您可以使用 index.html 解析它。

与其使用 .read() 将其临时保存到内存然后将其读取到 json ,而是允许 json 直接从文件中加载它:

 wjdata = json.load(urllib2.urlopen('url'))

原文由 Yarkee 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是使用 requests 的替代解决方案:

 import requests
wjdata = requests.get('url').json()
print wjdata['data']['current_condition'][0]['temp_C']

原文由 alecxe 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题