我一直在试图找出一个在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格式的数据。

任何建议都将不胜感激。


当前回答

对于任何想要快速修复的人来说,这只是将所有单引号替换为双引号:

import json 

predictions = []

def get_top_k_predictions(predictions_path):
    '''load the predictions'''
    
    with open (predictions_path) as json_lines_file:
        for line in json_lines_file:
            predictions.append(json.loads(line.replace("'", "\"")))
            
    
get_top_k_predictions("/sh/sh-experiments/outputs/john/baseline_1000/test_predictions.jsonl")

其他回答

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

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

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

我也有类似的问题。两个相互通信的组件使用队列。

第一个组件没有执行json。在将消息放入队列之前转储。 因此接收组件生成的JSON字符串是单引号。这就导致了错误

 Expecting property name enclosed in double quotes

添加json。转储开始创建正确格式的JSON &解决问题。

在我的情况下,错误不是在json.loads(data)

我已经做了一些错误与json结构之前,所以有一个不足的部分在它,如

{'http://example.org/about': {'http://purl.org/dc/terms/title':

这也是引起这个错误的情况

如果你有一个转换字典到字符串和双引号的问题,这可以帮助:

json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')

json。加载文档

with open('input.json','r') as f:
    s = f.read()
    s = s.replace('\'','\"')
    data = json.loads(s)

这对我来说非常有效。谢谢。