我正在尝试访问一些嵌套为来自网站的ajax响应的值。
所有东西都输出为一条巨大的线,我无法向下导航。然而,为了让您了解它的外观,字典的pprint就像:
{u'd': {u'Type': None,
u'__type': u'TOPS.ajaxResponse',
u'actionOnSuccess': None,
u'data': u'{"BasicCodes":{"PRODUCTPRICES":[{"ProductId":"ProductA","CategoryId":"1","Color":"Red","Quantity":"0"},{"ProductId":"ProductA","CategoryId":"2","Color":"Blue","Quantity":"0"},{"ProductId":"ProductB","CategoryId":"1","Color":"Red","Quantity":"0"},{"ProductId":"ProductB","CategoryId":"2","Color":"Blue","Quantity":"0"}, ...and so on...
.
.
.
u'data2': None,
u'dataExtra': None,
u'errors': [],
u'general_message': None,
u'success': True}}
列出了数百种产品(ProductA,ProductB等),但我想要做的就是从ProductB,Color Blue等特定产品中获取与“Quantity”相关联的数字。
我使用
将响应加载为字典 json_data = urllib2.urlopen('website')
content = json_data.read()
dictionary = json.loads(content)
dictionary.keys()
仅输出'd'
,dictionary.values()
输出除此之外的所有内容,包括u'success': True
之类的内容,我希望这是一个单独的键/值组合。如果我尝试使用
print dictionary['d']['data']['BasicCodes']['PRODUCTPRICES'][0]['Quantity']
我收到TypeError: string indices must be integers
的错误。
问题是我如何加载数据?或者我在导航键和值时错过了什么?
不确定它是否相关/相关,但输入时我也收到错误'unicode' object has no attribute 'values'
dictionary['d']['data'].values()
我是Python的新手,所以任何帮助都会受到赞赏。
答案 0 :(得分:3)
因为这种工作在任何语言中都非常难(不仅仅是在Python中!)我创建了ObjectPath查询语言,使得使用JSON文档变得轻而易举:
Python方式:
$ sudo pip install objectpath
$ python
>>> from objectpath import *
>>> with open('test1.json') as f:
... j = json.load(f)
>>> tree=Tree(j)
>>> tree.execute("$..PRODUCTPRICES[@.ProductId is "ProductA" and @.Color is "Blue"].Quantity")
[u'0']
控制台方式
git clone https://github.com/adriank/ObjectPath.git
cd ObjectPath/ObjectPathPy
python objectpath file.json
(or python objectpath -u URL)
>>> $..PRODUCTPRICES[@.ProductId is "ProductA" and @.Color is "Blue"].Quantity
[0]
你可以用这种语言做更多的事情!它就像SQL for JSON(以及其他复杂的数据结构)。更多信息:http://adriank.github.io/ObjectPath/