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

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

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

但每次我都得到相同的异常:

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

我谷歌了一下,但似乎没有什么工作,除了这个解决方案json.loads(json.dumps(data)),这对我个人来说似乎不是那么有效,因为它接受任何类型的数据,甚至那些不是json格式的数据。

任何建议都将不胜感激。


当前回答

使用json.dumps()方法总是理想的。 为了消除这个错误,我使用了以下代码

json.dumps(YOUR_DICT_STRING).replace("'", '"')

其他回答

在我的例子中,双引号不是问题。

最后一个逗号给了我同样的错误信息。

{'a':{'b':c,}}
           ^

为了删除这个逗号,我写了一些简单的代码。

import json

with open('a.json','r') as f:
    s = f.read()
    s = s.replace('\t','')
    s = s.replace('\n','')
    s = s.replace(',}','}')
    s = s.replace(',]',']')
    data = json.loads(s)

这对我很有效。

我的问题是,我复制并粘贴了一个JSON片段,所使用的双引号在某种程度上是一个不同的、无法识别的双引号字符。我的文件在替换双引号后是有效的JSON。

在手动编辑JSON时,我多次遇到过这个问题。 如果有人在没有注意到的情况下从文件中删除了一些内容,则会抛出相同的错误。

例如,如果您的JSON最后一个“}”丢失,它将抛出相同的错误。

所以如果你手动编辑你的文件,确保你的格式像JSON解码器所期望的那样,否则你会遇到同样的问题。

json语法要求每个“键”和“值”都使用引号。这使得它成为一种非常健壮的数据格式。在下面的例子中,我使用颜色和颜色作为键:

{"colors":[
  {
     "color":"red",
     "value":"#f00"
  },
  {
     "color":"green",
     "value":"#0f0"
  },
  {
     "color":"blue",
     "value":"#00f"
  },
  {
     "color":"cyan",
     "value":"#0ff"
  },
  {
     "color":"magenta",
     "value":"#f0f"
  },
  {
     "color":"yellow",
     "value":"#ff0"
  },
  {
     "color":"black",
     "value":"#000"
  }]}

使用json.dumps()方法总是理想的。 为了消除这个错误,我使用了以下代码

json.dumps(YOUR_DICT_STRING).replace("'", '"')