Python ValueError:从文件读取时无法解码任何JSON对象

Python ValueError:从文件读取时无法解码任何JSON对象,python,json,python-3.2,Python,Json,Python 3.2,我正在尝试将JSON文档加载到Python代码中。该文档如下所示: { "FH45 G34": { "surname": "Foo", "firstName": "Bar", "address": "1275 Real Street, FooBar", "postCode": "Foo Bar", "county": "FooBar" }, ... } 我正在尝试使用以下Python代码加载该文件: with open("foobar.jso

我正在尝试将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:无法解码任何JSON对象

怎么了

编辑:我不能使用SimpleJSON模块,因为它不适用于Python3.2,我一直在使用它。JSONLint还显示我的JSON是有效的

编辑2:整个文件是


编辑3:不知何故,问题自行解决。

使用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代码。一种方法是删除文件的一半,然后再试一次。如果仍然失败,则继续删除一半文件

如果有效,请用出现故障的零件替换文件,然后再次开始删除半部分。经过几次尝试,您将能够找到文件中有问题的部分,或者您是否有某种基本的读取错误

为了消除读取错误,您可以尝试在
json.loads()
调用前面执行
print('file:{}).format(foo.read())
,以验证读取的内容

测试json内联 您可以尝试进一步消除错误源的另一个测试是在字符串中插入一个或几个条目,并检查是文件处理还是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模块就会出现一些问题

使用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代码。一种方法是删除文件的一半,然后再试一次。如果仍然失败,则继续删除一半文件

如果有效,请用出现故障的零件替换文件,然后再次开始删除半部分。经过几次尝试,您将能够找到文件中有问题的部分,或者您是否有某种基本的读取错误

为了消除读取错误,您可以尝试在
json.loads()
调用前面执行
print('file:{}).format(foo.read())
,以验证读取的内容

测试json内联 您可以尝试进一步消除错误源的另一个测试是在字符串中插入一个或几个条目,并检查是文件处理还是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模块就会出现一些问题

以下代码已经过测试,可以完美地与您的问题中提供的配合使用

工作示例-使用Python测试2.6.92.7.103.2.53.3.53.5.0

导入json
以open('data.json','r')作为json_数据:
data=json.load(json_数据)
对于键,data.items()中的值:
打印(“”)
键{0}
县{1}
姓{2}
邮政编码{3}
名字{4}
地址{5}
''。格式(*[键,
值['county'],
值['姓氏'],
值['postCode'],
值['firstName'],
值['address']]))
输出

键VB95 JGL
富巴县
傅姓
邮政编码富吧
名字栏
地址:福巴皇家街1272号
钥匙AH63 FIR
富巴县
傅姓
邮政编码富吧
名字栏
地址:福巴皇家街1275号

以下代码已经过测试,可以完美地与问题中提供的配合使用

工作示例-使用Python测试2.6.92.7.103.2.53.3.53.5.0

导入json
以open('data.json','r')作为json_数据:
data=json.load(json_数据)
对于键,data.items()中的值:
打印(“”)
键{0}
县{1}
姓{2}
邮政编码{3}
名字{4}
地址{5}
''。格式(*[键,
值['county'],
值['姓氏'],
值['postCode'],
值['firstName'],
值['address']]))
输出

键VB95 JGL
富巴县
傅姓
邮政编码富吧
名字栏
地址:福巴皇家街1272号
钥匙AH63 FIR
富巴县
傅姓
邮政编码富吧
名字栏
地址:福巴皇家街1275号

可能重复@ivanab我无法使用SimpleJSON模块,因为它不适用于Python 3.2,我一直在使用它。你确定你的json文件是有效的json吗?@ivanab根据JSONLint。你在“…Street,FooBar”后面缺少一个逗号,所以json是无效的…可能是@ivanab的重复我不能使用SimpleJSON模块,因为它不适用于Python 3.2,我一直在使用它。你呢