首页 > 解决方案 > JSON在Python中解析元素内的元素

问题描述

我从网站的 API 中获取了一个 JSON 文本:

{"result":"true","product":{"made":{"Taiwan":"Taipei","HongKong":"KongStore","Area":"Asia"}}}

我想占领“台湾”和“台北”却总是失败。

这是我的代码:

import json
weather = urllib2.urlopen('url')
wjson = weather.read()
wjdata = json.loads(wjson)
print wjdata['product']['made'][0]['Taiwan']

我总是收到以下错误:关键字 0 错误

解析该json的正确方法是什么?

标签: pythonjsonparsingweb-scraping

解决方案


您正在索引一个没有的数组。JSON如下:

{ 
    "result":"true",
    "product": {
        "made": {
            "Taiwan":"Taipei",
            "HongKong":"KongStore",
            "Area":"Asia"
        }
    }
}

以上不包含数组。

您假设 JSON 结构是这样的:

{ 
    "result":"true",
    "product": {
        "made": [
            {"Taiwan":"Taipei"},
            {"HongKong":"KongStore"},
            {"Area":"Asia"}

        ]            
    }
}

通过简要查看 json 包的文档页面,我发现了这个转换表:使用 json.loads的转换表

它告诉我们 JSON 对象转换为 dict。一个 dict 有一个叫做 keys 的方法,它返回一个键列表。

我建议你尝试这样的事情:

#... omitted code
objectKeys = wjdata['product']['made'].keys()

# You should now have a list of the keys stored in objectKeys.
for key in objectKeys:
    print key
    if key == 'Taiwan':
        print 'Eureka'

我还没有测试上面的代码,但我想你在这里得到了要点:)


推荐阅读