Python的json.load怪异行为

时间:2019-05-23 10:22:25

标签: python

我正在尝试从目录中的日志文件中提取特定值。 现在,日志文件包含JSON数据,我想提取id字段的值。

JSON数据看起来像这样

{
    id: "123",
    name: "foo"
    description: "bar baz" 
}

代码看起来像这样

def test_load_json_directly(self):
    with open('source_data/testing123.json') as log_file:
        data = json.load(log_file)
        print data

def test_load_json_from_iteration(self, dir_path, file_ext):
    path_name = os.path.join(dir_path, '*.' + file_ext)

    files = glob.glob(path_name)
    for filename in files:
    with open(filename) as log_file:
        data = json.load(log_file)
        print data

现在,我尝试调用函数test_load_json_directly,以正确加载JSON字符串。没问题。这只是为了检查json.load函数的正确行为。

问题是当我尝试调用函数test_load_json_from_iteration时,无法识别JSON字符串并返回错误。

ValueError: No JSON object could be decoded

我在这里做什么错了?

1 个答案:

答案 0 :(得分:2)

您的json无效。属性名称和值必须用引号引起来(除非它们是数字)。您还缺少逗号。

此错误的最可能原因是json文件中的错误。由于json模块没有显示详细的错误,因此您可以使用simplejson模块查看实际发生的情况。

将代码更改为:

import simplejson
.
.
.

data = simplejson.load(log_file)

然后查看错误消息。它将向您显示失败的行和列。

例如:

simplejson.errors.JSONDecodeError: Expecting value: line 5 column 17 (char 84)

希望它会有所帮助:)随时询问您是否有任何疑问。