Python/Json:期望用双引号括起来的属性名称

新手上路,请多包涵

我一直在尝试找出一种在 Python 中加载 JSON 对象的好方法。我发送这个 json 数据:

 {'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}}

到后端,它将作为字符串接收,然后我使用 json.loads(data) 来解析它。

但每次我得到同样的例外:

 ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

我用谷歌搜索了它,但除了这个解决方案 json.loads(json.dumps(data)) 之外似乎没有任何工作,因为它接受任何类型的数据,即使是那些不是 json 格式的数据,我个人觉得效率不高。

任何建议将不胜感激。

原文由 raeX 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

这个:

 {
    'http://example.org/about': {
        'http://purl.org/dc/terms/title': [
            {'type': 'literal', 'value': "Anna's Homepage"}
        ]
     }
}

不是 JSON。

这个:

 {
     "http://example.org/about": {
         "http://purl.org/dc/terms/title": [
             {"type": "literal", "value": "Anna's Homepage"}
          ]
      }
}

是 JSON。

编辑:

一些评论者认为以上还不够。

JSON 规范 - RFC7159 规定字符串以引号开头和结尾。那就是 "

单引号 ' 在 JSON 中没有语义含义,只能在字符串中使用。

原文由 ElmoVanKielmo 发布,翻译遵循 CC BY-SA 4.0 许可协议

由于 JSON 只允许用双引号括起字符串,您可以像这样操作字符串:

 s = s.replace("\'", "\"")

如果您的 JSON 包含转义的单引号 ( \' ),那么您应该使用更精确的以下代码:

 import re
p = re.compile('(?<!\\\\)\'')
s = p.sub('\"', s)

这会将 JSON 字符串中所有出现的单引号替换为双引号 s 并且在后一种情况下不会替换转义的单引号。

您还可以使用不太严格的 js-beautify

 $ pip install jsbeautifier
$ js-beautify file.js

原文由 elig 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏