📌  相关文章
📜  Python|检查字符串是否为有效的 json(1)

📅  最后修改于: 2023-12-03 15:34:19.972000             🧑  作者: Mango

Python | 检查字符串是否为有效的 JSON

本文将介绍如何使用 Python 检查一个字符串是否为有效的 JSON 格式。我们将会讲到如何利用 Python 内置函数、第三方库来完成这一任务。

什么是 JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,并易于机器解析和生成。JSON 是基于 JavaScript 的一个子集,但 JSON 是独立于编程语言的。[^1]

JSON 由两种结构组成:

  • 名称/值对的集合(A collection of name/value pairs)
  • 值的有序列表(An ordered list of values)
Python 检查 JSON 的方法

1. 使用 Python 内置模块 json

Python 内置模块 json 提供了处理 JSON 数据的功能。json.loads() 函数可以将 JSON 数据转化为 Python 字典。如果转化失败,则说明该字符串不是有效的 JSON。

以下是使用 json 模块进行 JSON 检查的示例代码:

import json

def is_valid_json(json_str):
    try:
        json.loads(json_str)
        return True
    except ValueError:
        return False

print(is_valid_json('{"name": "John", "age": 30, "city": "New York"}'))  # True
print(is_valid_json('{"name": "John", "age": 30, "city": "New York", }'))  # False

2. 使用第三方库 jsonschema

jsonschema 是一个 Python 第三方库,它提供了更完整、更具体的 JSON 校验。 jsonschema 检查 JSON 数据时,不仅可以检查数据的格式是否正确,还可以检查数据的类型、长度等方面的完整性。以下是一个使用 jsonschema 校验 JSON 数据的示例:

from jsonschema import validate

json_schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "number"},
        "city": {"type": "string"}
    },
    "required": ["name", "age", "city"]
}

def is_valid_json(json_str):
    try:
        validate(instance=json_str, schema=json_schema)
        return True
    except Exception:
        return False

print(is_valid_json('{"name": "John", "age": 30, "city": "New York"}'))  # True
print(is_valid_json('{"name": "John", "age": 30}'))  # False, 缺少 city

注意

  • 在检查 JSON 字符串时,必须使用双引号来定义属性,单引号是无效的。
  • 在使用 jsonschema 校验 JSON 数据时,需要先定义校验规则("json_schema"),并在程序中传递要校验的 JSON 数据和规则。
  • 使用 jsonschema 校验 JSON 数据时,需要先安装该库,使用 pip install jsonschema 命令进行安装。
结论

本文介绍了两种方法检查 Python 中的字符串是否为有效的 JSON 数据。其中,第一种方法使用了 Python 内置模块 json,较为简单;第二种方法使用了第三方库 jsonschema,功能更为完善。无论哪种方法,您都能够使用它们进行 JSON 数据的校验。