Python 无法分析json内容,错误为“应包含属性名”`

Python 无法分析json内容,错误为“应包含属性名”`,python,json,python-3.x,Python,Json,Python 3.x,我正在从数据库中获取一个json格式的文本。基本上,通过文本字段将api内容从网站转储到db 我可以看到json内容没有任何问题/错误,但当我看到时 try: get_all = db.query("SELECT id, name, api_content FROM _books") _result = get_all.fetchall() except Exception as e: print("[e::line-163] ", e) try: for r

我正在从数据库中获取一个json格式的文本。基本上,通过文本字段将api内容从网站转储到db

我可以看到json内容没有任何问题/错误,但当我看到时

try:
    get_all = db.query("SELECT id, name, api_content FROM _books")
    _result = get_all.fetchall()
except Exception as e:
    print("[e::line-163] ", e)

try:
    for r in _result:
        api_content = r[2]
        j = json.loads(api_content)
        print('names, ', j['names'])
我得到这个错误

应使用双引号括起属性名称:第1行第2列(字符1)


api\u内容
没有问题,它是一个格式良好的json内容

我认为您在
api\u content
中没有有效的JSON。根据错误内容判断,属性(键)用单引号括起来,但需要用双引号括起来才能成为有效的JSON

以下是正在发生的事情:

>>> import json
>>> json.loads('{"key": "value"}')  # <- VALID JSON
{'key': 'value'}
>>> json.loads("{'key': 'value'}")  # <- INVALID JSON
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 355, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

我认为您在
api\u content
中没有有效的JSON。根据错误内容判断,属性(键)用单引号括起来,但需要用双引号括起来才能成为有效的JSON

以下是正在发生的事情:

>>> import json
>>> json.loads('{"key": "value"}')  # <- VALID JSON
{'key': 'value'}
>>> json.loads("{'key': 'value'}")  # <- INVALID JSON
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 355, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

我想这可能是它,我只是数据库,一切都在单引号。有办法解决这个问题吗?@soni-b3196413我会修改/修复将api内容转储到数据库中的方式(正确地使用json.dump)。如果您无法更改,您可以尝试通过加载api内容。那么,您是说有一种方法可以在将
api\u内容提交到数据库之前使用
json.dump
修复引号?如果是这样的话,那就更好了,因为我将尝试替换字符串。。这将是一个很大的工作。你能举个例子吗?对不起,我是0python@soni-b3196413我在答案中添加了更多信息-请查看。非常感谢。它可以工作,不确定ast是否不好,但我稍后会读它。我想可能就是它,我只是数据库,所有内容都用单引号括起来。有办法解决这个问题吗?@soni-b3196413我会修改/修复将api内容转储到数据库中的方式(正确地使用json.dump)。如果您无法更改,您可以尝试通过加载api内容。那么,您是说有一种方法可以在将
api\u内容提交到数据库之前使用
json.dump
修复引号?如果是这样的话,那就更好了,因为我将尝试替换字符串。。这将是一个很大的工作。你能举个例子吗?对不起,我是0python@soni-b3196413我在答案中添加了更多信息-请查看。非常感谢。它可以工作,不确定ast是否坏,但我稍后会阅读。