JavaScript 中将 JSON 转换为数组的实用方法
在 JavaScript 开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,常用于前后端数据传输,而数组作为 JavaScript 中最常用的数据结构之一,经常需要对 JSON 数据进行转换以方便后续处理,本文将详细介绍如何将 JSON 转换为数组,包括常见场景、具体方法及注意事项。
明确 JSON 与数组的区别
在转换前,需先明确 JSON 和数组的本质区别:
- JSON:是一种数据格式,本质上是字符串(如
'{"name":"Alice","age":25}'),它符合严格的语法规范(如键必须用双引号包裹)。 - 数组:是 JavaScript 的一种数据类型,用方括号
[]表示,元素可以是任意类型(如["Alice", 25])。
“将 JSON 转换为数组”通常指两种情况:
- 将 JSON 字符串 解析为 JavaScript 数组或对象,再进一步转换为数组;
- 将 JSON 对象(已解析为 JavaScript 对象)转换为数组。
JSON 字符串转数组:核心方法 JSON.parse()
如果数据是 JSON 格式的字符串(例如从 API 响应或文件中读取的字符串),需先用 JSON.parse() 将其解析为 JavaScript 原生对象(数组或对象),再根据需求处理。
JSON 字符串本身就是数组格式
当 JSON 字符串表示的是数组时(如 '["Alice","Bob","Charlie"]'),JSON.parse() 会直接将其转换为 JavaScript 数组:
const jsonString = '["Alice","Bob","Charlie"]'; const array = JSON.parse(jsonString); console.log(array); // 输出: ["Alice", "Bob", "Charlie"] console.log(Array.isArray(array)); // 输出: true(验证是否为数组)
JSON 字符串是对象,需转换为数组
JSON 字符串是对象格式(如 '{"name":"Alice","age":25}'),JSON.parse() 会得到一个对象,而非数组,此时可通过以下方式转换为数组:
(1)提取对象值组成数组
使用 Object.values() 获取对象的所有值,组成新数组:
const jsonString = '{"name":"Alice","age":25,"city":"New York"}';
const obj = JSON.parse(jsonString);
const valuesArray = Object.values(obj);
console.log(valuesArray); // 输出: ["Alice", 25, "New York"]
(2)提取对象键组成数组
使用 Object.keys() 获取对象的所有键,组成新数组:
const keysArray = Object.keys(obj); console.log(keysArray); // 输出: ["name", "age", "city"]
(3)提取键值对组成数组(元素为键值对数组)
使用 Object.entries() 将对象转换为 [key, value] 形式的数组:
const entriesArray = Object.entries(obj); console.log(entriesArray); // 输出: [["name", "Alice"], ["age", 25], ["city", "New York"]]
JSON 对象转数组:直接处理已解析对象
如果数据已经是 JavaScript 对象(非字符串,例如直接定义的变量或已解析的 JSON),无需 JSON.parse(),直接使用 Object 的方法即可转换为数组。
对象值转数组
const jsonObj = { name: "Alice", age: 25, city: "New York" };
const valuesArray = Object.values(jsonObj);
console.log(valuesArray); // 输出: ["Alice", 25, "New York"]
对象键转数组
const keysArray = Object.keys(jsonObj); console.log(keysArray); // 输出: ["name", "age", "city"]
键值对转数组
const entriesArray = Object.entries(jsonObj); console.log(entriesArray); // 输出: [["name", "Alice"], ["age", 25], ["city", "New York"]]
特殊场景处理:嵌套 JSON 转数组
当 JSON 数据包含嵌套结构时,需递归或遍历处理,将嵌套对象数组中的某个属性提取为新数组:
嵌套对象数组转一维数组
假设 JSON 字符串是对象数组,需先解析为对象,再直接使用:
const jsonString = '[{"name":"Alice","age":25},{"name":"Bob","age":30}]';
const objArray = JSON.parse(jsonString);
console.log(objArray);
// 输出: [{"name":"Alice","age":25}, {"name":"Bob","age":30}]
提取嵌套数组中的特定属性
从嵌套对象数组中提取所有 name 属性:
const namesArray = objArray.map(item => item.name); console.log(namesArray); // 输出: ["Alice", "Bob"]
多层嵌套 JSON 转数组
对于多层嵌套(如 {"user":{"name":"Alice","hobbies":["coding","reading"]}}),需逐层解析:
const nestedJsonString = '{"user":{"name":"Alice","hobbies":["coding","reading"]}}';
const nestedObj = JSON.parse(nestedJsonString);
const hobbiesArray = nestedObj.user.hobbies;
console.log(hobbiesArray); // 输出: ["coding", "reading"]
注意事项与常见错误
确保 JSON 字符串格式正确
JSON.parse() 要求字符串符合 JSON 语法规范,否则会抛出 SyntaxError,常见错误包括:
- 键使用单引号(如
{'name':'Alice'}),需改为双引号({"name":"Alice"}); - 尾部有逗号(如
{"name":"Alice",}),需删除多余逗号。
错误示例:
const invalidJson = "{'name':'Alice'}"; // 单引号导致报错
JSON.parse(invalidJson); // SyntaxError: Unexpected token ' in JSON
处理 undefined 和函数
JSON 不支持 undefined 和函数,若数据中包含这些类型,JSON.parse() 会忽略或报错。
const dataWithUndefined = '{"name":"Alice","age":undefined}';
JSON.parse(dataWithUndefined); // 输出: {"name":"Alice"}(undefined 被忽略)
验证转换结果
转换后建议用 Array.isArray() 验证是否为数组,避免后续操作出错:
const result = JSON.parse('["Alice","Bob"]');
if (!Array.isArray(result)) {
throw new Error("转换结果不是数组");
}
将 JSON 转换为数组的核心步骤可归纳为:
- 字符串转对象:若数据是 JSON 字符串,用
JSON.parse()解析; - 对象转数组:根据需求选择
Object.values()(取值)、Object.keys()(取键)或Object.entries()(取键值对); - 处理嵌套结构:通过遍历、递归或
map()等方法提取目标数据。
这些方法,能灵活应对不同场景下的 JSON 数据转换需求,提升数据处理效率。



还没有评论,来说两句吧...