为什么json.decoder.JSONDecodeError?

时间:2017-08-22 15:57:14

标签: python json logging

我正在尝试使用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解码器失败?

提前感谢您的帮助。

3 个答案:

答案 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/;它往往会提供更有用的帮助信息。