访问JSON元素


81

我正在从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。


2
requests是与JSON相处的一种了不起的方法。如果您要处理复杂的URL,请使用它。
Surya

Answers:


114
import json
weather = urllib2.urlopen('url')
wjson = weather.read()
wjdata = json.loads(wjson)
print wjdata['data']['current_condition'][0]['temp_C']

您从url中获得的是一个json字符串。而且您不能直接用索引解析它。您应该将其转换为dict json.loads,然后可以使用index对其进行解析。

与其使用.read()中间方式将其保存到内存,然后将其读取到json,不如json直接从文件中加载它:

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

1
很酷,现在正在运行。您能解释一下为什么吗?
doniyor

1
Yarkee已经解释了@doniyor。这是因为它已使用转换为字典json.loads()。您只是尝试直接访问JSON ...而没有转换为Python可读的任何内容或使用模块来执行此操作。
2013年

3
最好这样做json.load(urllib2.urlopen('url'))是直接加载而不是将其中间保存到内存中
jamylak

1
假设有更多的当前条件条目,是否有一种不知道索引就可以返回的方法?
user2019182 '18

我得到这个TypeError:每当我尝试使用单词作为数组索引时,列表索引必须是整数,而不是unicode。我怎样才能像您一样工作?
伊恩·泰特

28

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

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

1
假设有更多的当前条件条目,是否有一种不知道索引就可以返回的方法?
user2019182 '18

7

'temp_C'是字典内的键,该键在字典内的列表内

这种方式有效:

wjson['data']['current_condition'][0]['temp_C']
>> '10'

0

对请求使用get方法的另一种替代方法:

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

0

只是有更多选择...您也可以通过这种方式做到这一点:

MYJSON = {
    'username': 'gula_gut',
    'pics': '/0/myfavourite.jpeg',
    'id': '1'
}

#changing username
MYJSON['username'] = 'calixto'
print(MYJSON['username'])

希望对您有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.