在python中获取JSON嵌套值

时间:2016-01-06 06:12:26

标签: python json nested

我99%肯定这已经得到了解答,但我是一个认真的新手,需要你的天使。

以下是JSON我通过API调用

{
name: "dt_listings",
count: 10,
results: {
collection1: [
    {
    title: {
    text: "Human Anatomy and Physiology 10th",
    href: "http://www.directtextbook.com/isbn/9780321927040"
    },
    isbn: {
    text: "9780321927040",
    href: "http://www.directtextbook.com/isbn/9780321927040"
    }
} ]

import requests
import json
dt_raw = requests.get(dt_listings_url)
dt_json = dt_raw.json()

在此之后,我的问题就开始了。我似乎无法转到['结果']然后转到['collection1']然后['title']来获取['title'] ['text']和['isbn'] ['的值文本']

大请求,如果您使用代码示例来提供帮助,请使用上面对象的名称,以便我可以关注(我在这里有一个严重的大脑冻结!)。是的,我已经阅读了许多相关的stackoverflow帖子,我仍然很难用这个。

5 个答案:

答案 0 :(得分:3)

检查你的json,它有三个错误

  1. 键和值应为双引号
  2. 收集关键字 brakect] 缺失。
  3. 还缺少两个结束 brakets}
  4. 这是你适当的json

     {
        "name": "dt_listings",
        "count": 10,
        "results": {
        "collection1": [
            {
             "title": {
             "text": "Human Anatomy and Physiology 10th",
             "href": "http://www.directtextbook.com/isbn/9780321927040"
             },
             "isbn": {
             "text": "9780321927040",
             "href": "http://www.directtextbook.com/isbn/9780321927040"
             }
           }
         ]
        }
      }
    

    如果您的json格式正确,请检查您的json类型 的类型(dt_json)

    如果type为 str ,请执行 json.loads(dt_json),然后尝试 dt_json ["结果"] [&#34 ; collection1"] [0] ["标题"] ["文本"]

    如果type是dict,那么直接尝试 dt_json ["结果"] [" collection1"] [0] [" title"] [ "文本"]

答案 1 :(得分:0)

  1. 您可以使用:

    dt_json [ “结果”] [ “collection1”] [0] [ “标题”] [ “文本”]

  2. 有一个关闭方括号(“]”),可能在最后一个结束花括号之前。这使得dt_json [“results”] [“collection1”]的值成为一个应该由整数索引的列表。

答案 2 :(得分:0)

首先字典无效。 应为双引号

<强>第二下, 您必须通过 API 检查响应类型

假设您得到 dt_json 的答案。使用type(dt_json)检查它的类型。

如果类型为“ str ”,那么您必须使用json.loads 加载 dt_json (dt_json) )然后你可以轻松地 prase ..

答案 3 :(得分:0)

{
  "name": "dt_listings",
  "count": 10,
  "results": {
    "collection1": [
      {
        "title": {
          "text": "Human Anatomy and Physiology 10th",
          "href": "http://www.directtextbook.com/isbn/9780321927040"
        },
        "isbn": {
          "text": "9780321927040",
          "href": "http://www.directtextbook.com/isbn/9780321927040"
        }
      }
    ]
  } 
}

我猜你的数据应该如上所述。您的json数据中存在一些语法错误。

如果那是真的:

import json

your_data = "{\n\"name\": \"dt_listings\",\n\"count\": 10,\n\"results\": {\n\"collection1\": [\n{\n    \"title\": {\n    \"text\": \"Human Anatomy and Physiology 10th\",\n    \"href\": \"http://www.directtextbook.com/isbn/9780321927040\"\n    },\n    \"isbn\": {\n    \"text\": \"9780321927040\",\n    \"href\": \"http://www.directtextbook.com/isbn/9780321927040\"\n    }\n    }\n  ]\n} \n}\n"

structured_data = json.loads(your_data)

# then get the result:

print structured_data['results']['collection1'][0]['isbn']

答案 4 :(得分:0)

每个人都非常乐于助人。关键问题是dt_json是类型dict。所以下面的代码完美无缺。

dt_raw = requests.get(dt_listings_url)
dt_json = dt_raw.json()
print dt_json["results"]["collection1"][0]["isbn"]["text"]