我正在尝试从网站访问作为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,蓝色)中获取与“数量”相关的编号.
我通过使用将响应加载为字典
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']
这是我如何加载数据的问题吗?还是在导航键和值时丢失了某些内容?
不知道它是否相关/相关,但是当我输入时我也得到一个错误“ unicode”对象没有属性“ values”
dictionary['d']['data'].values()
我是Python的新手,因此可以提供任何帮助.
解决方法:
因为用任何一种语言(不仅是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]
您可以使用该语言做更多的事情!就像用于JSON(和其他复杂数据结构)的sql.更多信息:http://adriank.github.io/ObjectPath/