我正在尝试从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))
答案 0 :(得分:1)
您当前遇到的问题是您的json对象有一个带有多个值的键。解决方案是使用自定义的JSONDecoder.object_pairs_hook,如本文前面所述。
答案 1 :(得分:0)
您的JSON格式不正确。 JSON对象(如其映射到的Python字典)对于每个键只能有一个项目。每次都使用相同的键“添加”。
您可能需要一个对象数组,而不是单个对象。