首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么是json.decoder.JSONDecodeError?

为什么是json.decoder.JSONDecodeError?
EN

Stack Overflow用户
提问于 2017-08-22 15:57:13
回答 3查看 1.5K关注 0票数 1

我正在尝试使用logging.config.dictConfig()配置我的Python日志模块

但是,我的JSON文件似乎已经损坏,尽管它的工作方式是Python并将false更改为False,所以我不认为这是语法错误。

我的守则说:

代码语言:javascript
复制
import json

with open('logging_config.json') as f:
    d = json.load(f)

我的logging_config.json文件是:

代码语言:javascript
复制
{
  "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解码器失败?

提前感谢您的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-22 16:07:32

您有多个外部逗号,这将破坏JSON反序列化。

这里是您的原始JSON,每个外来逗号都指出:

代码语言:javascript
复制
{
  "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文档:

代码语言:javascript
复制
{
    "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
        }
    }
}
票数 7
EN

Stack Overflow用户

发布于 2017-08-22 16:21:46

正如其他人已经回答的那样,JSON中有一些多余的逗号。

您可以将JSON提供给https://jsonlint.com/;它会提供更多有用的帮助消息。

票数 2
EN

Stack Overflow用户

发布于 2017-08-22 16:07:53

这是因为您的JSON无效。这个JSON是有效的。我从您的JSON中删除了额外的逗号。您可以使用任何JSON验证器来修复它。

代码语言:javascript
复制
{
  "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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45822264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档