【问题标题】:Parsing JSON with Python from URL使用 Python 从 URL 解析 JSON
【发布时间】:2015-08-17 17:47:10
【问题描述】:

所以我试图从 URl 获取 json,请求有效,我得到了 json,但我无法从中打印特定的东西。

    request_url = 'http://api.tumblr.com/v2/user/following?limit=1'
    r = requests.get(request_url, auth=oauth).json()


    r["updated"]

我对 python 很陌生,我猜我需要将 json 放入一个数组中,但我什至不知道从哪里开始。

根据 tumblr api,我应该能够得到这样的东西。

    {
      "meta": {
        "status": 200,
        "msg": "OK"
      },
      "response": {
        "total_blogs": 4965,
        "blogs": [
          {
            "name": "xxxxx",
            "title": "xxxxxx",
            "description": "",
            "url": "http://xxxxxx.tumblr.com/",
            "updated": 1439795949
          }
        ]
      }
    }

我只需要名称、网址和更新,只是不知道如何将其分开。

【问题讨论】:

  • 如果您在示例中获取 JSON,则需要访问 r["response"]["blogs"][0]["updated"]
  • 谢谢大家,几乎所有这些答案都有帮助。我不明白我必须访问它之前的值。

标签: python json parsing


【解决方案1】:

只需一层一层地访问。

for i in r["response"]["blogs"]:
    print i["name"],i["url"],i["updated"]

所以这段代码可以用来打印blogs列表中的所有对象

解释这是如何工作的:

Json 对象在 Python 中被解码为 dictionaries。字典是简单的键值对。在您的示例中,

r 是具有以下键的字典:

meta, response

您使用 r["meta"] 访问键的值。

现在 meta 本身就是一本字典。相关的键是:

status,msg

所以,r["meta"]["status"] 给出了请求返回的状态值。

【讨论】:

  • 我可以通过循环添加到字典中吗? tumblr api 的限制是一次只能拉 20 个东西
  • Add onto the dictionary with a loop?如果你的意思是向字典中添加数据,是的,你可以。
【解决方案2】:

您应该能够像嵌套数组一样打印值:

r["response"]["blogs"][0]["updated"] 应该为您提供更新的位,不要直接访问它。只管往下走。请注意 blogs 是一个数组,因此在正常情况下,您实际上可能希望使用r["response"]["blogs"],然后循环遍历它,并为每个项目获取["updated"]

同样,r["meta"]["msg"] 将为您提供元消息。

【讨论】:

    【解决方案3】:

    JSON 数据被转换为 dict,根据您的代码设置为 r

    要访问与updated 键关联的值,您需要先访问它之前的值。

    您应该首先访问包含 api 实际响应的 r["response"]。从该级别开始,您接下来应该访问 r["response"]["blogs"],然后遍历该级别以查找 updated 键的值。

    如果是单个博客,可以做r["response"]["blogs"][0]["updated"]之类的操作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2019-08-11
      • 2016-12-05
      相关资源
      最近更新 更多