当前位置: 首页 > 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.xdnf.cn/news/1107127.html

相关文章:

  • C#调用Matlab生成的DLL
  • C++ Map 和 Set 详解:从原理到实战应用
  • win10安装Rust Webassembly工具链(wasm-pack)报错。
  • 细谈kotlin中缀表达式
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (四) 产业应用全景扫描
  • Vim的magic模式
  • javaEE——synchronized关键字
  • Linux解决vim中文乱码问题
  • Spring AOP 是如何生效的(入口源码级解析)?
  • leetcode:HJ18 识别有效的IP地址和掩码并进行分类统计[华为机考][字符串]
  • 【Datawhale AI夏令营】mcp-server
  • [Python] Flask 多线程绘图时报错“main thread is not in main loop”的解决方案
  • 【unity实战】在Unity实现低耦合可复用的交互系统
  • 14. 请谈一下浏览器的强缓存和协商缓存
  • 基于大模型的鼻咽癌全周期预测及诊疗优化研究报告
  • YOLO家族内战!v5/v8/v10谁才是你的真命天子?(附保姆级选择指南)
  • 推荐系统-数据分割、性能验证
  • 开源 python 应用 开发(五)python opencv之目标检测
  • (LeetCode 面试经典 150 题 ) 209. 长度最小的子数组(双指针)
  • Vue.js:从 Web 到桌面的跨端实践与技术选型指南
  • 华为IPD(集成产品开发)流程是其研发管理的核心体系
  • pdf合并
  • 基于Java的Markdown到Word文档转换工具的实现
  • 解决‘vue‘ 不是内部或外部命令,也不是可运行的程序
  • css 判断是ios设备 是Safari浏览器
  • el-tree 懒加载 loadNode
  • 柯里化入门:拆拆拆,拆出函数式编程的优雅
  • OSPFv3-一二类LSA
  • Qt:QCustomPlot类介绍
  • Qt窗口:菜单栏