我正在尝试从目录中的日志文件中提取特定值。 现在,日志文件包含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
我在这里做什么错了?
答案 0 :(得分:2)
您的json无效。属性名称和值必须用引号引起来(除非它们是数字)。您还缺少逗号。
此错误的最可能原因是json文件中的错误。由于json模块没有显示详细的错误,因此您可以使用simplejson
模块查看实际发生的情况。
将代码更改为:
import simplejson
.
.
.
data = simplejson.load(log_file)
然后查看错误消息。它将向您显示失败的行和列。
例如:
simplejson.errors.JSONDecodeError: Expecting value: line 5 column 17 (char 84)
希望它会有所帮助:)随时询问您是否有任何疑问。