我正在尝试使用logging.config.dictConfig()
配置我的Python日志记录模块但是,我的JSON文件似乎已损坏,即使它作为Python字典用作false
更改为False
,因此我认为这不是语法错误。
我的代码说:
import json
with open('logging_config.json') as f:
d = json.load(f)
我的logging_config.json
文件是:
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"standard": {
"format": "[%(levelname)s] %(name)s: %(message)s"
},
},
"handlers": {
"default": {
"level": "DEBUG",
"formatter": "standard",
"class": "logging.StreamHandler",
},
},
"loggers": {
"": {
"handlers": ["default"],
"level": "INFO",
"propagate": true
},
"myfunc": {
"handlers": ["default"],
"level": "DEBUG",
"propagate": false
},
}
}
当我运行该简单程序时,出现错误:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 8 column 3 (char 156)
什么可能导致JSON解码器失败?
提前感谢您的帮助。
答案 0 :(得分:6)
你有多个无关的逗号会破坏JSON反序列化。
这是你的原始JSON,每个无关的逗号都指出:
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"standard": {
"format": "[%(levelname)s] %(name)s: %(message)s"
}, # <--- extraneous comma
},
"handlers": {
"default": {
"level": "DEBUG",
"formatter": "standard",
"class": "logging.StreamHandler", # <--- extraneous comma
}, # <--- extraneous comma
},
"loggers": {
"": {
"handlers": ["default"],
"level": "INFO",
"propagate": true
},
"myfunc": {
"handlers": ["default"],
"level": "DEBUG",
"propagate": false
}, # <--- extraneous comma
}
}
删除它们,现在这是一个有效的JSON文档:
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"standard": {
"format": "[%(levelname)s] %(name)s: %(message)s"
}
},
"handlers": {
"default": {
"level": "DEBUG",
"formatter": "standard",
"class": "logging.StreamHandler"
}
},
"loggers": {
"": {
"handlers": ["default"],
"level": "INFO",
"propagate": true
},
"myfunc": {
"handlers": ["default"],
"level": "DEBUG",
"propagate": false
}
}
}
答案 1 :(得分:1)
这是因为您的JSON无效。这一个JSON是有效的。 我从你的JSON中删除了额外的逗号。 您可以使用任何JSON验证程序来修复它。
{
"version": 1,
"disable_existing_loggers": false,
"formatters":
{
"standard":
{
"format": "[%(levelname)s] %(name)s: %(message)s"
}
},
"handlers":
{
"default":
{
"level": "DEBUG",
"formatter": "standard",
"class": "logging.StreamHandler"
}
},
"loggers":
{
"":
{
"handlers": ["default"],
"level": "INFO",
"propagate": true
},
"myfunc":
{
"handlers": ["default"],
"level": "DEBUG",
"propagate": false
}
}
}
答案 2 :(得分:1)
正如其他人已经回答的那样,你的JSON中有一些多余的逗号。
您可以将JSON提供给https://jsonlint.com/;它往往会提供更有用的帮助信息。