Python-不检索所有json对象,仅检索最后一个

时间:2019-03-20 17:50:50

标签: python json

我正在尝试从Cranfield集合(在.json文件中)的文档中实现反向索引。下面是.json文件包含的内容。实际上,其中有1400条,但这是第一行和最后一行。

{
  "add" : {
    "doc" : {
      "id" : 1,
      "author" : "brenckman,m.",
      "bibliography" : "j. ae. scs. 25, 1958, 324.",
      "body" : "a lot of text.",
      "title" : "title 1."
    }
  },
  "add" : {
    "doc" : {
      "id" : 1400,
      "author" : "kleeman,p.w.",
      "bibliography" : "arc r + m.2971, 1953.",
      "body" : "a lot of text.",
      "title" : "title 2."
    }
  },
  "commit" : { }
}

但是,我什至无法正确读取.json文件来开始建立反向索引。当我运行下面给出的代码时,它仅输出.json文件的最后一个对象以及"commit": {}。因此,基本上在上面的示例中,所有内容都从第二个“ add”开始。

考虑到有1400个对象,我不明白为什么我只能得到最后一个对象。我的代码如下。例如,我也使用print(len(data))进行了检查,当我期望1400时返回2。我们将不胜感激。

import json
from pprint import pprint

with open("cranfield-data.json", encoding="utf-8") as data_file:
  data = json.loads(data_file.read())

pprint((data))

2 个答案:

答案 0 :(得分:1)

您当前遇到的问题是您的json对象有一个带有多个值的键。解决方案是使用自定义的JSONDecoder.object_pairs_hook,如本文前面所述。

Python json parser allow duplicate keys

答案 1 :(得分:0)

您的JSON格式不正确。 JSON对象(如其映射到的Python字典)对于每个键只能有一个项目。每次都使用相同的键“添加”。

您可能需要一个对象数组,而不是单个对象。