【问题标题】:How to decode JSON with Python [duplicate]如何使用 Python 解码 JSON [重复]
【发布时间】:2011-01-20 21:01:57
【问题描述】:

我从 reddit.com 获取我的 JSON,本质上是 something like this. 我已经阅读了相当多的内容,但我真的不明白如何从这个 JSON 中获取我想要的信息(我想要一个列表的故事链接)。我知道我可以将 JSON “解码”成字典,但是我是否需要在整个 JSON 中重复才能得到我需要的东西?

提前致谢。

【问题讨论】:

  • 当您在 Google 上搜索 Python 和 JSON 时,您发现了什么?您是否尝试过“Python 库 JSON”?你看到了什么?
  • 当我用谷歌搜索 python decode json 时,我发现了这篇文章....

标签: python json


【解决方案1】:

如果您使用的是 Python 2.6 或更高版本,请使用内置的 json 库。否则,使用具有完全相同接口的simplejson

您可以使用以下代码自适应地执行此操作,而无需自己检查 Python 版本:

try:
    import json
except ImportError:
    import simplejson as json

然后,使用json.loads() 或任何适当的东西。

【讨论】:

  • 请注意,打开的 url 给出了一个类似文件的对象,所以json.load 可能是合适的函数。
【解决方案2】:
import urllib2
import json

u = urllib2.urlopen('http://www.reddit.com/.json')
print json.load(u)
u.close()

【讨论】:

    【解决方案3】:

    有两种方法可以使用 Python“解码”json,你已经使用 json 库将其解析为字典和列表。

    首先,通过索引访问它,如下所示:

    url_list = [t['entries'][0]['url'] for t in data['windows'][0]['tabs']]
    

    或者,您可以迭代其树结构。下面的示例函数不是通用的,它只是说明在解析树时需要不同地考虑 JSON 的三种不同类型的“节点”。键的“值”可能是数据、没有键的子节点列表或基本上是新 JSON 对象的字典。您不能像使用常规树一样检查每个节点的名称、数据和子节点。

    def depthFirstSearch(self, jsonobj, target, parentKey=None):
            if isinstance(jsonobj, dict):
                for key, value in jsonobj.items():
                    if isinstance(value, (dict, list)):
                        self.depthFirstSearch(value, target, key)
                    else:   # "data" node
                        if key == target and parentKey not in self.parentsToExclude:
                            self.results.append(value)
                            self.parents[parentKey] += 1
            if isinstance(jsonobj, list):
                for value in jsonobj:
                    #lists don't have keys, pass along key from last dict
                    self.depthFirstSearch(value, target, parentKey)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多