当前位置: 首页 > news >正文

别再怕 JSON!5分钟带你轻松搞懂这个程序员的好帮手

目录

一. JSON 到底是个啥?

二. JSON 长啥样?解剖它的“身体结构”

2.1 键值对 (Key-Value Pair)

2.2 数据类型 (Data Types)

三. JSON 在实际开发中怎么用?

四. 总结一下 JSON 的优点


一. JSON 到底是个啥?

  • 全称: JavaScript Object Notation (JavaScript 对象表示法)

  • 本质: 一种轻量级数据交换格式

  • 核心任务: 把数据(比如文字、数字、列表、对象)结构化地组织成一种纯文本的字符串,方便在不同的系统、编程语言、前后端之间传递和存储

  • 特点:

    • 人可读: 结构清晰,比 XML 简洁很多 (对比一下 XML 那些复杂的标签就知道了)。

    • 机器可解析: 程序可以很容易地“读懂”JSON 字符串里的内容并转换成自己需要的数据结构。

    • 语言无关: 虽然名字里有 JavaScript,但几乎所有主流编程语言(Java, Python, C#, PHP, Go...)都内置了处理 JSON 的能力。

简单说,JSON 就是一种用特定格式写的文本,专门用来表示和传递结构化的数据。

 

二. JSON 长啥样?解剖它的“身体结构”

JSON 的基本结构非常简单,主要就两种东西组合而成:

2.1 键值对 (Key-Value Pair)

这是 JSON 的基础单元。想象成你身份证上的信息:

  • "name": 这是 键 (Key),相当于信息项的名称(如“姓名”)。必须用英文双引号 "" 包裹起来

  • "张三": 这是 值 (Value),相当于该信息项的具体内容(如你的名字)。值可以是多种类型(见下文)。

  • 中间用 冒号 : 分隔。

  • 多个键值对之间用 逗号 , 分隔。

    {"name": "张三","age": 30,"isStudent": false,"hometown": null
    }

    2.2 数据类型 (Data Types)

    JSON 里的值 (value) 可以是以下几种基本类型:

  • 字符串 (String): 用双引号 "" 包裹的文本。 "Hello World""北京"

  • 数字 (Number): 整数或小数。 423.14159

  • 布尔值 (Boolean): 表示真或假。 truefalse

  • 空值 (Null): 表示一个空值或没有值。 null

  • 数组 (Array): 用方括号 [] 包裹的有序的值列表。值可以是任何类型(包括字符串、数字、对象、甚至另一个数组),值之间用逗号分隔。

    ["apple", "banana", "orange"] // 字符串数组
    [1, 2, 3, 4, 5] // 数字数组
    [true, false, null] // 混合类型数组
    [{"name": "A"}, {"name": "B"}] // 对象数组

  • 对象 (Object): 用花括号 {} 包裹的无序键值对集合。这就是 JSON 构建复杂结构的核心!对象里的值也可以是任何类型(字符串、数字、数组、甚至另一个对象)。

    {"person": {"name": "李四","age": 25,"address": {"city": "上海","street": "浦东大道"},"hobbies": ["读书", "游泳", "编程"]}
    }

 

重要规则:

  1. 键 (Key) 必须用双引号 "" 包裹。 单引号不行!不加引号也不行!

  2. 字符串 (String) 也必须用双引号 "" 包裹。

  3. 最后一个键值对后面不能有逗号 , (这是新手常犯错误)

  4. 标准 JSON 不支持注释! (虽然有些解析器宽松处理,但为了兼容性最好别写注释)。

 

三. JSON 在实际开发中怎么用?

JSON 最常见的舞台就是 Web 开发中的前后端交互

  1. 前端发送数据给后端 (如:提交表单):

    • 前端把用户输入的数据(姓名、年龄等)组织成一个 JSON 对象。

    • 通过 HTTP 请求(通常是 POST/PUT)的请求体 (Body) 发送给后端。

    • 代码片段 (JavaScript):

      let userData = {username: "user123", // 注意:JS对象键可不用引号,但转成JSON字符串时会自动加password: "secretPass" // 实际密码传输必须加密!
      };
      // 使用 JSON.stringify() 把 JS 对象转换成 JSON 字符串
      fetch('/api/login', {method: 'POST',headers: { 'Content-Type': 'application/json' }, // 告诉后端我发的是JSONbody: JSON.stringify(userData) // 发送转换后的JSON字符串
      });

  2. 后端发送数据给前端 (如:查询结果):

  • 后端从数据库查询到数据。

  • 把数据组织成 JSON 对象(或数组)。

  • 通过 HTTP 响应的响应体 (Body) 发送给前端。

  • 代码片段 (Java with Spring Boot):

    @GetMapping("/api/user/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {User user = userService.findById(id);if (user != null) {// Spring Boot 会自动将 User 对象转换成 JSON 字符串return ResponseEntity.ok(user);} else {return ResponseEntity.notFound().build();}
    }

    前端接收处理 (JavaScript):

    fetch('/api/user/123').then(response => response.json()) // 使用 .json() 解析响应体中的 JSON 字符串为 JS 对象.then(data => {console.log(data.name); // 访问解析后的对象属性console.log(data.email);});

    其他常见用途:

  • 配置文件: 很多软件(如 VS Code 的 settings.json)用 JSON 格式存储配置。

  • NoSQL 数据库: 像 MongoDB 就直接存储类似 JSON 的文档 (BSON)。

  • API 接口: 绝大多数 Web API (如微信支付、地图 API) 都使用 JSON 作为请求和响应的标准格式。

 

四. 总结一下 JSON 的优点

  1. 简单: 语法规则少,结构清晰,上手快。

  2. 轻量: 纯文本格式,相比 XML 冗余信息少,传输效率高。

  3. 通用: 几乎所有编程语言和平台都支持,是数据交换的“世界语”。

  4. 灵活: 能通过对象和数组的嵌套表示非常复杂的数据结构。

 

结语:

JSON 并不神秘,它就是数据沟通的桥梁。掌握了它的基本结构和规则,你就能在 Web 开发、API 调用、数据处理等众多场景中游刃有余了。

 

http://www.dtcms.com/a/275809.html

相关文章:

  • 鸿蒙的NDK开发初级入门篇
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (四) 产业应用全景扫描
  • (LeetCode 面试经典 150 题 ) 209. 长度最小的子数组(双指针)
  • Ntfs!LfsFlushLfcb函数分析之while的循环条件NextLbcb的确定和FirstLbcb->LbcbFlags的几种情况
  • docker-compose方式搭建lnmp环境——筑梦之路
  • 【android bluetooth 协议分析 07】【SDP详解 2】【SDP 初始化】
  • Operation Blackout 2025: Smoke Mirrors
  • Windows符号链接解决vscode和pycharm占用C盘空间太大的问题
  • NX二次开发——导入模型是常遇见的问题(导入模型原点的确定导入模型坐标的确定)
  • BERT:双向Transformer革命 | 重塑自然语言理解的预训练范式
  • 深入理解大语言模型:从核心技术到极简实现
  • 洛谷题解 | UVA1485 Permutation Counting
  • jenkins自动化部署前端vue+docker项目
  • 前端面试宝典---项目难点2-智能问答对话框采用虚拟列表动态渲染可视区域元素(10万+条数据)
  • 自动化运维工具jenkins问题
  • Ubuntu安装Jenkins
  • java堆的创建与基础代码解析(图文)
  • Classifier guidance与Classifier-free guidance的原理和公式推导
  • 深大计算机游戏开发实验三
  • 深度学习图像分类数据集—害虫识别分类
  • 分布式数据库系统模式结构深度解析
  • Nginx 中的负载均衡策略
  • 数据统计及透视表
  • 使用Java完成下面项目
  • 引入了模块但没有使用”,会不会被打包进去
  • 【科研绘图系列】R语言绘制小提琴图
  • 基于定制开发开源AI智能名片S2B2C商城小程序的社群游戏定制策略研究
  • cuDNN 的 IMPLICIT_GEMM 算法
  • 【数据结构初阶】--顺序表(二)
  • 浅谈 Pydantic v2 的 RootModel 与联合类型——构建多请求结构的统一入口模型