📜  JSON-数据类型(1)

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

JSON 数据类型

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写。它基于JavaScript语法的一个子集,但也可用于 Python、Java、PHP 等多种编程语言。

JSON 数据由键值对组成,键值对之间使用逗号 "," 进行分割,整个数据使用花括号 "{}" 包围。例如:

{"name": "John Smith", "age": 35, "city": "New York"}

其中,每个键值对由冒号 ":" 分隔,键名是字符串,值可以是字符串、数字、布尔、数组、对象,甚至是null。例如:

{
    "name": "Tom",
    "age": 25,
    "isMale": true,
    "interests": ["music", "movies"],
    "address": {
        "street": "123 Main St",
        "city": "San Francisco",
        "zip": "94101"
    },
    "scores": [
        {
            "subject": "Math",
            "value": 90
        },
        {
            "subject": "History",
            "value": 80
        }
    ],
    "profileImage": null
}

其中,键名 "name" 对应字符串值 "Tom",键名 "age" 对应数字值 25,"isMale" 对应布尔值 true,"interests" 对应数组,"address" 对应嵌套对象,"scores" 对应一个由嵌套对象构成的数组,"profileImage" 对应null。

序列化与反序列化

由于 JSON 与多种编程语言都兼容,因此通常需要解析和生成 JSON 数据。这一过程称为序列化和反序列化。

在 Python 中,可以使用 json 模块进行 JSON 数据的序列化和反序列化。例如:

import json

# 将 Python 字典序列化为 JSON 字符串
data = {"name": "Tom", "age": 25}
json_string = json.dumps(data)

# 将 JSON 字符串反序列化为 Python 字典
data = json.loads(json_string)

在 JavaScript 中,可以使用 JSON 对象的 stringify 和 parse 方法进行序列化和反序列化。例如:

// 将 JavaScript 对象序列化为 JSON 字符串
var data = {name: "Tom", age: 25};
var json_string = JSON.stringify(data);

// 将 JSON 字符串反序列化为 JavaScript 对象
var data = JSON.parse(json_string);
JSON Schema

JSON Schema 是一种用于描述 JSON 数据结构及其约束的语言。它可以用于验证 JSON 数据是否符合特定的格式要求,从而提升数据的可靠性和互操作性。

JSON Schema 的语法与 JSON 类似,可以通过关键字来描述数据结构、类型、格式、条件等。例如:

{
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer", "minimum": 0}},
    "required": ["name", "age"]
}

其中,关键字 "type" 表示数据类型,关键字 "properties" 表示对象属性,关键字 "required" 表示必填属性。这个 JSON Schema 描述了一个包含 "name" 和 "age" 两个属性的对象,其中 "name" 属性必须是字符串,"age" 属性必须是非负整数。

可以使用各种编程语言的 JSON Schema 解析库来验证 JSON 数据是否符合特定的 Schema。例如,在 Python 中可以使用 fastjsonschema 库进行验证:

import fastjsonschema

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer", "minimum": 0}},
    "required": ["name", "age"]
}

validate = fastjsonschema.compile(schema)
data = {"name": "Tom", "age": -1}

try:
    validate(data)
except fastjsonschema.JsonSchemaException as e:
    print("Validation error: " + str(e))
总结

JSON 是一种简单、通用、轻量、易于生成和解析的数据格式,可用于多种编程语言之间的数据交换。JSON 数据由键值对组成,键名是字符串,值可以是字符串、数字、布尔、数组、对象,甚至是null。JSON Schema 是一种用于描述 JSON 数据结构及其约束的语言,可以用于验证 JSON 数据的格式和完整性。