LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

揭秘 JSON,让你少掉 90% 的坑 !

admin
2025年4月30日 15:1 本文热度 69

JSON,全称 JavaScript Object Notation(JavaScript 对象表示法),是现代 Web 数据交换 的基础。它的名字听起来可能有点复杂,但相信读完本文后,你不仅会搞懂 JSON 是什么,还会明白它的重要性,以及它在各种场景中是怎么应用的。

理解 JSON

什么是 JSON?

正如前面所介绍的,JSON 是一种轻量级、可读性强的数据格式,主要用于数据交换。

从本质上看,JSON 是一种基于文本的格式,它由“键-值”对组成,既方便机器处理,也便于人类理解。

JSON 主要应用在:

  • Web 应用前端与后端之间的数据传输
  • 配置文件(比如应用的设置、数据库配置等)
  • 存储结构化数据(像 NoSQL 数据库中的 JSON 文档)

为什么 JSON 对 Web 开发人员很重要

JSON 之所以重要,关键在于它的灵活性和简单性。对于 Web 开发者来说,它具有以下几个显著优势:

  • 可读性强:JSON 格式清晰直观,结构简单,便于开发过程中阅读、调试和排查问题。
  • 轻量高效:JSON 数据结构紧凑,传输时几乎没有多余的负担,非常适合在网络环境中快速传递数据。
  • 语言无关性:JSON 并不依赖于某种特定的编程语言,几乎可以被所有主流语言解析和使用,具有极强的通用性。
  • 高度兼容:尤其与 JavaScript 等现代 Web 技术无缝集成,天然契合前端开发,因此成为 Web 开发中首选的数据格式。

现在我们对 JSON 有了基本了解,我们接下来可以深入看看 JSON 的结构长什么样,它是如何工作的。

JSON 剖析

JSON 结构

JSON 数据采用层级结构进行组织,主要由两种基本结构构成:对象(Object)和数组(Array)。

对象

对象是 JSON 的基本单位,用 花括号 {} 括起来,里面包含多个键值对(key-value pairs)。

  • 键(key):必须是字符串,用来标识对应的值。
  • 值(value):可以是字符串、数字、布尔值、对象或数组以及null。

示例:

{
    "name""Alice",
    "age"25
}

在这个例子中,"name"和"age"是键,而"Alice"和25是它们各自对应的值。

对象可以嵌套,也就是说,一个对象里面还可以包含另一个对象,例如:

{
  "name""李四",
  "contact": {
    "email""lisi@example.com",
    "phone""123456789"
  }
}

中间的的键"contact"对应的值:

{
  "email""lisi@example.com",
  "phone""123456789"
}

就是由两个对象组成: email 和 phone 两个键值对。

数组

数组是值的有序列表,用方括号括起来[]。

{
    "fruits": ["apple""banana""orange"]
}

这里,"fruits"是一个键,关联的值是一个字符串数组,包含 "apple"、"banana" 和 "orange" 这三个元素。

JSON 数据类型

JSON 支持多种数据类型,理解它们至关重要。注意这里的类型指的是值的类型,因为键的类型只能是字符串,没有讨论的余地了。

JSON中,值可以为以下类型之一:

  • 字符串
  • 数字
  • 布尔值
  • Null
字符串

字符串是用双引号 "" 括起来的字符序列,通常用于表示文本数据。

{
    "name""Alice"
}

在这个例子中,"Alice"是一个字符串。

数字

JSON 支持整数和小数(浮点数),数字不需要加引号。

{
    "age"25,
    "temperature"98.6
}

这里的25 是整数,98.6 是浮点数,它们都是合法的 JSON 数值类型。

布尔值

布尔值只有2个取值:true表示真,false表示假。

{
    "isStudent"true,
    "isWorking"false
}
Null

JSON 还支持特殊值 null,表示不存在的值或者占位符。

{
    "middleName"null
}

这里"middleName" 设置为 null,表示没有这个数据或者暂时缺失。

JSON 的实际应用

Web 开发中的 JSON

在 Web 开发中,JSON 无处不在,常用于数据传输、存储和配置。以下是几个典型的应用场景:

API 响应

许多 Web 服务和 API 以 JSON 格式响应数据。例如天气预报 API 可能会返回如下数据:

{
    "location""New York",
    "temperature"72,
    "conditions""Partly Cloudy"
}

这个 JSON 包含了天气信息,可以用于前端页面显示天气状况。

用户数据存储和传输

用户与 Web 应用交互时,他们的个人信息通常以 JSON 格式存储和传输。

{
    "username""zhangsan",
    "email""zhangsan@example.com",
    "age"28
}

这个 JSON 表示用户的基本资料。

电子商务网站

在电商平台(如淘宝、京东)中,JSON 主要用于管理商品信息和购物车等数据。以下是用户购物车的 JSON 表示示例:

{
    "userId""user123",
    "cart": [
        { "productId""product456""quantity"2 },
        { "productId""product789""quantity"1 }
    ]
}
配置存储

JSON 还常用于存储Web 应用程序的配置设置。例如,一个内容管理系统可能具有如下配置数据:

{
    "siteName""MyBlog",
    "theme""light",
    "analyticsEnabled"true
}

这个 JSON 定义了网站名称、主题风格和是否启用数据分析,Web 应用可以动态读取这些配置,根据 JSON 内容调整网站的展示风格。

JSON 在移动应用中的应用

JSON 不仅仅用于 Web 开发,在 APP 开发中同样至关重要。APP 需要与服务器通信,获取和发送数据,而 JSON 是最常用的数据格式之一。

例如以下服务器返回给天气app的JSON数据示例:

{
    "city""bei jing",
    "currentTemperature"68,
    "forecast": [
        { "day""Monday""temperature"70 },
        { "day""Tuesday""temperature"72 },
        { "day""Wednesday""temperature"69 }
    ]
}

这个 JSON 结构中:

  • city:当前城市名称
  • currentTemperature:当前温度(单位:摄氏度)
  • forecast:未来几天的天气预报(使用数组存储)

天气app拿到JSON数据后,解析 JSON,提取数据后显示在天气页面。

JSON 在物联网(IoT)和智能设备中的应用

在 物联网(IoT)和智能设备 中,JSON 也是主要的数据格式。各种智能设备(如智能家居、传感器、可穿戴设备)都需要通过 JSON 进行数据交换。

例如一个智能恒温器需要将当前温度上传到服务器:

{
    "deviceID""thermostat123",
    "currentTemperature"22.5,
    "targetTemperature"20
}

在这个 JSON 结构中:

  • deviceID:设备唯一 ID
  • currentTemperature:当前检测到的室温
  • targetTemperature:用户设定的目标温度

服务器接收这个 JSON 数据后,可以分析当前温度是否达到目标温度。

使用 JSON

现在,我们已经了解了 JSON 的结构和应用场景,接下来,我们看看如何在不同的编程语言中使用 JSON,包括 解析 JSON 和 创建 JSON。

解析 JSON

大多数编程语言都提供了用于解析 JSON 的内置库或模块。例如,在 JavaScript 中,可以使用JSON.parse() 方法将 JSON 字符串转换为 JavaScript 对象。

const jsonString = '{"name": "Alice", "age": 25}';
const jsonObject = JSON.parse(jsonString);

console.log(jsonObject.name); // 输出: Alice
console.log(jsonObject.age);  // 输出: 25

类似地,在 Python 中,可以使用json模块的 json.loads() 方法将 JSON 字符串转换为 Python 字典(dict)。

import json

json_string = '{"name": "Alice", "age": 25}'
json_object = json.loads(json_string)

print(json_object["name"])  # 输出: Alice
print(json_object["age"])   # 输出: 25

创建 JSON

创建 JSON 也很简单。在 Python 中,可以使用 json.dumps() 方法,将 Python 字典 转换为 JSON 字符串。

import json

data = {
    "name""Bob",
    "age"30,
    "isStudent"False,
    "favoriteColors": ["red""blue"]
}

json_string = json.dumps(data, indent=4)  
print(json_string)

JSON 高级概念

在前面,我们了解了 JSON 的基础知识和常见应用。接下来,我们来探索 JSON 的一些高级概念,包括嵌套结构、JSON Schema 以及 JSON Web Token(JWT)等内容,理解这些高级特性在实际开发中也非常重要。

嵌套 JSON

JSON 支持嵌套结构,以用于表示更复杂的数据关系。比如一本书可能有多个作者,这时就可以用如下的 嵌套 JSON 来表示:

{
    "title""The JSON Guide",
    "authors": [
        { "name""Alice""age"35 },
        { "name""Bob""age"42 }
    ]
}

在这个 JSON 对象中,"authors" 是一个键,对应的值是一个数组,数组中的每一项又是一个表示作者信息的对象,包含姓名和年龄。

通过这种嵌套方式,JSON 能够清晰地表达出书籍与多个作者之间的层级关系,结构直观且易于扩展。

JSON Schema

JSON Schema 是一种用来描述 JSON 数据结构和校验规则的规范。它在API 开发中尤为重要,因为它可以明确规定接口中 JSON 数据的格式和要求,从而提升数据的可靠性和一致性。

下面是一个用于描述用户信息的 JSON Schema 示例:

{
    "type""object",
    "properties": {
        "name": { "type""string" },
        "age": { "type""integer" }
    },
    "required": ["name"]
}
  • type: "object" 表示这是一个 JSON 对象。
  • properties 定义了该对象包含的字段:
  • "name" 必须是字符串类型(string)。
  • "age" 是整数类型(integer),但不是必填项。
  • required: ["name"] 说明 "name" 字段是必须存在的,但 "age" 可选。

那么,下面的JSON 数据符合此 Schema:

{
    "name""张三",
    "age"25
}

而下面这个 JSON 不符合 Schema 规则,因为缺少"name"字段:

{
    "age"30
}

JSON Web Token(JWT)

在 Web 开发中,用户登录后,服务器通常需要对其身份进行验证,并确保每次请求都是合法的。JWT(JSON Web Token)是一种广泛使用的身份验证机制,它以 JSON 格式存储和传递用户认证信息。

JWT 由三部分组成:

  1. Header(头部):声明使用的算法和 token 类型。
  2. Payload(载荷):存储用户信息和权限数据。
  3. Signature(签名):用于验证数据的完整性,防止篡改。

以下是一个 JWT 的示例:

// 头部
{
"alg""HS256",
"typ""JWT"
}

// 载荷
{
"sub""1234567890",
"name""Alice",
"iat"1516239022
}

//  然后根据如下方式生成签名:
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

最终生成的 JWT 是将这三部分用点号 . 拼接在一起的一个字符串(header.payload.signature),通常长这样:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IuWQjeensCIsImlhdCI6MTUxNjIzOTAyMn0.s5sA2VLtP1r9BOzGGm0U7Jb9Mj93DtD5-20u8AicrtQ

JWT是怎么用的?

在用户登录成功后,服务器可以将用户信息封装进 JWT 中,返回给客户端,后续客户端请求时只需携带这个 JWT,服务器端解析 JWT 就能识别用户身份,无需反复查询数据库。这样的机制简化了认证流程,同时提高了系统的安全性和效率。

JSON 最佳实践

1. 确保 JSON 格式正确

在编写和使用 JSON 时,如果格式不正确,解析时就会报错,导致程序崩溃或数据丢失。因此,确保 JSON 格式有效是第一步。

如何验证JSON 格式是否正确?

  1. 在线验证:使用 JSONLint 或 jsonformatter 进行格式检查。
  2. 编程语言自带解析函数,如果能成功解析,则说明格式正确,以python语言为例:
import json
try:
    json.loads(json_string)
    print("JSON 格式正确")
except json.JSONDecodeError as e:
    print("JSON 格式错误:", e)

在书写JSON数据时,需要注意以下几点以避免格式错误:

  • 避免多余的逗号,如 { "name": "张三", "age": 30, }(❌)。
  • 确保键名用双引号,如 { name: "张三" }(❌,应写成 { "name": "张三" })。
  • 避免 null 值,如果字段无值,可省略,而不是使用 null。
2. 处理 JSON 解析错误

在处理 JSON 数据时,解析失败可能会导致应用崩溃,尤其是当 JSON 数据来自用户输入或外部接口时,错误的JSON数据是难以避免的。因此,实现错误处理机制至关重要。

3. 避免 JSON 注入攻击

JSON 注入攻击是黑客通过恶意 JSON 数据来篡改程序逻辑或窃取信息。例如,黑客可能发送:

{
    "username""admin",
    "role""admin"
}

如果系统直接信任 JSON 数据,并据此设定权限,攻击者可能就能冒充管理员。

因此不要直接信任用户输入的 JSON,必须严格校验字段类型和内容。

4. 传输敏感数据时使用加密

在网络中传输 JSON 时,敏感数据(如密码、Token)必须加密,防止被窃听:

JSON 的未来

随着 WebAssembly(WASM)、BSON(二进制 JSON)等技术的发展,JSON 可能会在某些高性能场景下被更高效的格式部分替代。

但由于 JSON 简单、直观,各种语言都支持,因此未来仍然会是Web 开发和数据交换领域不可或缺的一部分。随着技术的不断演进,围绕 JSON 的工具和生态也在持续完善,使开发者能够更轻松地处理和管理数据。


阅读原文:https://mp.weixin.qq.com/s/L1rajoiU6EMDQmbo-E6blw


该文章在 2025/4/30 15:01:15 编辑过
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved