JSON 数组(长文讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在编程和数据交互的世界中,JSON(JavaScript Object Notation)已成为一种不可或缺的通用数据格式。它以简洁、易读的结构,广泛应用于前后端通信、配置文件存储和数据持久化等领域。而 JSON 数组作为 JSON 的核心组成部分之一,更是开发者日常工作中频繁接触的对象。无论是处理用户列表、订单数据,还是构建复杂的 API 响应,JSON 数组都扮演着“数据容器”的关键角色。

本文将从零开始,系统讲解 JSON 数组的基础概念、语法结构、操作方法,以及实际开发中的应用场景。通过案例和代码示例,帮助初学者快速掌握这一工具,同时为中级开发者提供进阶技巧。


JSON 数组的基本概念与结构

定义与作用

JSON 数组是 JSON 格式中用于存储一组有序数据的结构。它可以包含字符串、数字、对象、嵌套数组等任意数据类型,甚至可以包含其他 JSON 对象。其核心作用是 批量管理同类型或相关联的数据

例如,一个购物车的物品列表可以用 JSON 数组表示:

[  
  { "product_id": 101, "name": "iPhone 15", "price": 999 },  
  { "product_id": 202, "name": "AirPods Pro", "price": 199 }  
]  

这里,每个元素是一个描述商品的对象,整个数组构成了购物车的完整数据集合。

语法结构与规则

JSON 数组的语法结构由以下部分组成:

  1. 方括号包裹:用 [] 表示数组的开始和结束。
  2. 元素分隔符:数组内的元素用逗号 , 分隔,最后一个元素后不能有逗号(否则会导致语法错误)。
  3. 元素类型:支持字符串、数字、布尔值、对象、嵌套数组等。

示例与对比

以下表格对比了不同数据类型的 JSON 数组:

类型示例代码说明
字符串数组["apple", "banana", "orange"]存储多个文本值
数字数组[10, 20, 30, 40]存储数值集合
对象数组[{"id":1, "name":"Alice"}, {"id":2, "name":"Bob"}]存储结构化对象的集合
嵌套数组[[1,2,3], [4,5,6], ["a", "b", "c"]]数组内可包含其他数组

如何创建 JSON 数组

手动编写 JSON 数组

对于小型数据集,开发者可以直接按照语法规范手动编写 JSON 数组。例如,创建一个表示用户权限的数组:

[  
  "read",  
  "write",  
  "delete"  
]  

需要注意的是,手动编写时需严格遵循语法规则,避免遗漏逗号或引号,否则会导致解析失败。

通过编程语言动态生成

在实际开发中,开发者通常通过编程语言生成 JSON 数组。以下是几种常见语言的示例:

JavaScript

JavaScript 原生支持 JSON 操作。使用 JSON.stringify() 可将 JavaScript 数组转换为 JSON 字符串:

const userRoles = ["admin", "editor", "guest"];  
const jsonArr = JSON.stringify(userRoles);  
console.log(jsonArr); // 输出:["admin","editor","guest"]  

Python

Python 的 json 模块提供了类似的功能:

import json  

orders = [  
    {"order_id": 1001, "total": 150},  
    {"order_id": 1002, "total": 300}  
]  
json_str = json.dumps(orders, indent=2)  
print(json_str)  

Java

在 Java 中,可以通过第三方库如 JacksonGson 处理 JSON 数组:

import com.google.gson.Gson;  

public class Main {  
    public static void main(String[] args) {  
        String[] fruits = {"apple", "banana", "mango"};  
        Gson gson = new Gson();  
        String jsonArr = gson.toJson(fruits);  
        System.out.println(jsonArr); // 输出:["apple","banana","mango"]  
    }  
}  

遍历与操作 JSON 数组

解析 JSON 字符串

在接收到 JSON 字符串后,需要将其转换为编程语言中的对象才能进行操作。例如,JavaScript 中通过 JSON.parse() 解析:

const jsonStr = '[{"id":1, "name":"John"}, {"id":2, "name":"Jane"}]';  
const userArr = JSON.parse(jsonStr);  
console.log(userArr[0].name); // 输出:John  

遍历数组元素

遍历 JSON 数组的常用方法包括 for 循环、forEachmap 等。以下以 JavaScript 为例:

使用 for 循环

const tasks = [  
    { id: 1, title: "完成报告", done: false },  
    { id: 2, title: "测试代码", done: true }  
];  

for (let i = 0; i < tasks.length; i++) {  
    console.log(`任务 ${tasks[i].title} 的状态是:${tasks[i].done ? "已完成" : "未完成"}`);  
}  

使用 forEach 方法

tasks.forEach(task => {  
    console.log(`任务 ${task.title} 的状态是:${task.done ? "已完成" : "未完成"}`);  
});  

修改与操作数组

添加元素

使用数组的 push() 方法添加新元素:

const newTask = { id: 3, title: "部署项目", done: false };  
tasks.push(newTask);  

删除元素

通过索引删除元素:

tasks.splice(1, 1); // 删除索引为1的元素("测试代码")  

过滤与筛选

利用 filter() 方法筛选出未完成的任务:

const pendingTasks = tasks.filter(task => !task.done);  

JSON 数组的常见操作与技巧

嵌套结构的处理

当 JSON 数组包含嵌套对象或数组时,需逐层解析。例如,解析以下嵌套数据:

[  
  {  
    "category": "水果",  
    "items": ["苹果", "香蕉"]  
  },  
  {  
    "category": "蔬菜",  
    "items": ["胡萝卜", "菠菜"]  
  }  
]  

可以通过以下代码获取所有蔬菜名称:

const categories = JSON.parse(jsonStr);  
const vegetables = categories[1].items; // 输出:["胡萝卜", "菠菜"]  

数据类型转换

JSON 数组中的元素可能包含字符串表示的数值,需显式转换为数字类型:

const prices = ["100", "200", "300"];  
const total = prices.map(Number).reduce((a, b) => a + b); // 总和为600  

性能优化建议

  • 避免频繁解析和序列化:如果需要多次操作同一数据,应将其存储为对象而非重复转换。
  • 使用工具库:如在 JavaScript 中使用 Lodash_.map()_.filter() 提高代码可读性。

JSON 数组在实际开发中的应用场景

API 数据传输

现代 Web 应用常通过 RESTful API 返回 JSON 数组。例如,获取用户列表的响应可能如下:

{  
  "users": [  
    { "id": 1, "name": "Alice", "email": "alice@example.com" },  
    { "id": 2, "name": "Bob", "email": "bob@example.com" }  
  ]  
}  

前端可通过解析 users 数组渲染用户界面。

配置文件管理

JSON 数组也常用于配置文件,例如定义应用的路由规则:

[  
  { "path": "/home", "component": "Home" },  
  { "path": "/about", "component": "About" }  
]  

数据持久化

在本地存储或数据库中,JSON 数组可用于存储结构化数据。例如,用 localStorage 保存用户收藏的书籍:

const books = [  
    { title: "算法导论", author: "Thomas H. Cormen" },  
    { title: "JavaScript 高级程序设计", author: "Nicholas C. Zakas" }  
];  
localStorage.setItem("favoriteBooks", JSON.stringify(books));  

常见问题与解决方案

语法错误:缺少逗号或引号

问题

[  
  {"id":1, "name":"John"  
  {"id":2, "name":"Jane"}  
]  

原因:第二行缺少逗号分隔符,且对象间未正确分隔。
解决方案

[  
  {"id":1, "name":"John"},  
  {"id":2, "name":"Jane"}  
]  

类型不匹配错误

当解析后的数据与预期类型不符时,需检查序列化过程。例如,将数字字符串误处理为字符串:

const numStr = "123";  
console.log(Number(numStr) + 456); // 输出:579  

大数据量处理优化

对于超大型 JSON 数组(如百万级数据),建议分页加载或使用流式解析库(如 JSONStream),避免内存溢出。


结论

JSON 数组作为结构化数据存储的核心工具,其简洁性与灵活性使其成为编程领域的“万金油”。无论是构建 API、管理配置,还是处理用户交互数据,掌握 JSON 数组的语法、操作技巧和实际应用,都能显著提升开发效率。

对于初学者,建议从手动编写简单数组开始,逐步结合代码实践;中级开发者可深入学习嵌套结构、性能优化等高级技巧。通过不断练习和项目应用,JSON 数组将成为你技术栈中不可或缺的利器。

希望本文能为你理解 JSON 数组 提供清晰的路径,也欢迎在评论区分享你的学习心得或实际案例!

最新发布