繁体   English   中英

Python的json.load怪异行为

[英]Python's json.load weird behavior

我正在尝试从目录中的日志文件中提取特定值。 现在,日志文件包含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

我在这里做错了什么?

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

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

将您的代码更改为:

import simplejson
.
.
.

data = simplejson.load(log_file)

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

例如:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM