我一直在试图找出一个在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美化工具,如json美化工具,因为它帮助我修复了json文件中尾随逗号的错误,该错误产生了相同的错误。

其他回答

正如它清楚地说错了,名字应该用双引号括起来,而不是单引号。您传递的字符串不是有效的JSON。它应该是这样的

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

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

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.loads()函数之前,我使用python中的regex来替换它。(注意“loads”后面的s)

import re

with open("file.json", 'r') as f:
     s = f.read()
     correct_format = re.sub(", *\n *}", "}", s)
     data_json = json.loads(correct_format)

使用的正则表达式返回每个逗号后跟换行符和“}”,用“}”替换它。

下面的代码片段将有助于将数据转换为JSON。所有单引号都应该转换为双引号以jsonify数据。

data = {
"http://example.org/about": {
    "http://purl.org/dc/terms/title": [{
        "type": "literal",
        "value": "Anna's Homepage"
    }]
}}
parsed_data = data.replace("'", '"')
data_json = json.loads(parsed_data)
with open('input.json','r') as f:
    s = f.read()
    s = s.replace('\'','\"')
    data = json.loads(s)

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