编程语言
首页 > 编程语言> > 使用来自Ajax Repsonse的嵌套值浏览Python字典

使用来自Ajax Repsonse的嵌套值浏览Python字典

作者:互联网

我正在尝试从网站访问作为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']

我收到TypeError错误:字符串索引必须是整数.

这是我如何加载数据的问题吗?还是在导航键和值时丢失了某些内容?

不知道它是否相关/相关,但是当我输入时我也得到一个错误“ 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/

标签:ajax,dictionary,python-2-x,json,python
来源: https://codeday.me/bug/20191121/2054392.html