json.decoder.JSONDecodeError:期望值:,json.decoder.JSONDecodeError:期望属性名称用双引号引起来:

时间:2018-07-27 07:20:30

标签: python json python-jsonschema

嗨,我正在使用Python在我的文件中使用JSON:

import json
userData = '''[
{
    "userID" : "20",
    "devices" : {
        "360020000147343433313337" : "V33_03",
        "3f0026001747343438323536" : "Door_03",
        "170035001247343438323536" : "IR_06",
        "28004c000651353530373132" : "BED_17"
    }
},

]'''

info = json.loads(userData)

加载时出现此错误: json.decoder.JSONDecodeError:预期值:

,或者有时当我添加一些内容时:  json.decoder.JSONDecodeError:期望属性名称用双引号引起来:

4 个答案:

答案 0 :(得分:3)

尝试使用ast模块

例如:

import ast
userData = '''[
{
    "userID" : "20",
    "devices" : {
        "360020000147343433313337" : "V33_03",
        "3f0026001747343438323536" : "Door_03",
        "170035001247343438323536" : "IR_06",
        "28004c000651353530373132" : "BED_17"
    }
},
]'''

info = ast.literal_eval(userData)
print(info)

答案 1 :(得分:1)

看起来格式不正确。

userData = '''[
{
    "userID" : "20",
    "devices" : {
        "360020000147343433313337" : "V33_03",
        "3f0026001747343438323536" : "Door_03",
        "170035001247343438323536" : "IR_06",
        "28004c000651353530373132" : "BED_17"
    }
},  <--- remove this ","

]'''

查看我的测试

>>> import json
>>> json.loads('[{"a":"b"}]')
[{u'a': u'b'}]
>>> json.loads('[{"a":"b"},]')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\json\__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python27\lib\json\decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
>>>

答案 2 :(得分:1)

为以后的参考,下面如何获取JSON内容或获取一些垃圾邮件:

import requests


url = 'http://httpbin.org/status/200'
r = requests.get(url)

if 'json' in r.headers.get('Content-Type'):
    js = r.json()
else:
    print('Response content is not in JSON format.')
    js = 'spam'

答案 3 :(得分:0)

您的示例按原样进行,没有进一步的理解: info = json.loads(json.dumps(userData))将起作用。

SO上有很多关于python多行字符串和JSON的文章。理想情况下,您不会从字符串变量加载字符串,那样便会看到一般注释。

通过一些其他解释,例如数据起源和格式,我可以提供更多帮助。