用 Python 标准库读取 JSON 配置:类型与错误处理

举报
yd_237867988 发表于 2026/11/07 00:48:16 2026/11/07
【摘要】 使用 Python 标准库解析 JSON 配置,验证端口和布尔值,并处理格式错误。

JSON 常用于保存简单配置。Python 的 json 模块可以直接把 JSON 对象转换为字典,但解析成功并不意味着配置内容一定符合应用要求:字段可能缺失,类型也可能不正确。

先观察解析结果

import json

config = json.loads('{"port": 8080, "debug": false}')
print(config["port"], type(config["port"]).__name__, config["debug"])
print(json.dumps(config, ensure_ascii=False, sort_keys=True))

本地运行输出:

8080 int False
{"debug": false, "port": 8080}

JSON 的 false 在 Python 中成为 False;序列化时又写回小写 false。sort_keys 让字典键按顺序输出,便于比较;它不改变原有字典。ensure_ascii=False 可以让非 ASCII 字符直接输出,写入文件时仍要指定合适编码。

验证配置的基本约束

import json

def read_config(text):
    try:
        value = json.loads(text)
    except json.JSONDecodeError as exc:
        raise ValueError(f"JSON 格式错误,行 {exc.lineno} 列 {exc.colno}") from exc
    if not isinstance(value, dict):
        raise ValueError("配置顶层必须是对象")
    port = value.get("port")
    if type(port) is not int or not 1 <= port <= 65535:
        raise ValueError("port 必须是 1 到 65535 的整数")
    debug = value.get("debug", False)
    if type(debug) is not bool:
        raise ValueError("debug 必须是布尔值")
    return {"port": port, "debug": debug}

这里对 port 用 type 而非 isinstance,是因为 Python 中 bool 是 int 的子类,isinstance(True, int) 会返回 True。端口检查只验证数字范围,不保证端口可用,也不代表应用可以绑定该端口。debug 缺省为 False,缺少 port 则明确报错。

读取文件时可以用 open(path, encoding=“utf-8”) 和 json.load;文件不存在及权限错误属于文件操作异常,应按调用场景单独处理。配置中若含密钥,应使用适当的密钥管理方式,避免把敏感值写入公开仓库或日志。

参考:Python 标准库 json 文档。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。