我试图将JSON文档加载到我的Python代码中。该文件如下:
{
"FH45 G34": {
"surname": "Foo",
"firstName": "Bar",
"address": "1275 Real Street, FooBar",
"postCode": "Foo Bar",
"county": "FooBar"
},
...
}
我尝试使用以下Python代码加载文件:
with open("foobar.json", "r") as foo:
bar = json.load(foo)
但是我收到以下错误ValueError: No JSON object could be decoded
出了什么问题?
编辑:我无法使用SimpleJSON模块,因为它不适用于Python 3.2,我不习惯使用它。 JSONLint还显示我的JSON有效。
编辑2:整个文件是here
编辑3:不知何故问题已经解决了。
答案 0 :(得分:0)
使用Python 2.7读取文件时,它会将大多数行转换为unicode字符串,这表明以下更改可能会对Python 3.2世界产生影响:
with open('foobar.json', encoding='utf-8') as foo:
bar = json.load(foo)
# or
bar = json.loads(foo.read())
如果上述方法不起作用,则需要查找违规的json代码。一种方法是删除文件的一半,然后再试一次。如果它仍然失败,那么继续删除一半的文件。
如果有效,请将文件替换为失败部分,然后再次开始删除一半。经过几次尝试后,您将能够找到文件中有问题的部分,或者您是否有基本的读数错误。
要消除阅读错误,您可以尝试在print('file: {}'.format(foo.read()))
调用前执行json.loads()
,只是为了验证阅读内容。
您可以尝试进一步消除错误源的另一个测试是将一个或几个条目插入到字符串中,并检查它是文件处理还是json处理,它会给您带来错误。类似于以下内容:
json_text= '''
{ "FH45 G34":
{
"surname": "Foo",
"firstName": "Bar",
"address": "1275 Real Street, FooBar",
"postCode": "Foo Bar",
"county": "FooBar"
}
}'''
parsed = json.loads(json_text)
您还可以检查是否由于第一个条目的键中的空格而失败。换句话说,从失败的条目中删除空格,主要是在左侧键值。
如果这些测试没问题,那么您的文件读取就会出现问题。如果它们失败,则json模块存在一些问题。
答案 1 :(得分:0)
以下代码已经过测试,可以使用问题中提供的whole JSON file
完美运行。
工作示例 - 使用Python 2.6.9 和 2.7.10 和 3.2.5 和 3.3.5 和 3.5.0 强>
import json
with open('data.json', 'r') as json_data:
data = json.load(json_data)
for key, value in data.items():
print('''
key {0}
county {1}
surname {2}
postCode {3}
firstName {4}
address {5}
'''.format(*[key,
value['county'],
value['surname'],
value['postCode'],
value['firstName'],
value['address']]))
<强>输出强>
key VB95 JGL
county FooBar
surname Foo
postCode Foo Bar
firstName Bar
address 1272 Real Street, FooBar
key AH63 FIR
county FooBar
surname Foo
postCode Foo Bar
firstName Bar
address 1275 Real Street, FooBar