0

0

js 中 JSON.parse 方法作用 js 中 JSON.parse 方法的使用场景

煙雲

煙雲

发布时间:2025-07-22 19:19:01

|

1194人浏览过

|

来源于php中文网

原创

json.parse的核心作用是将符合json格式的字符串转换为javascript对象或值;2. 常见使用场景包括与后端api交互、本地存储读取、web workers通信及处理配置文件;3. 使用时需避开的坑有输入非合法json字符串、误解null与undefined、忽略安全性及性能问题;4. 其隐藏技能是第二个参数reviver函数,可在解析过程中对数据进行类型转换、过滤或预处理,例如将日期字符串转为date对象。

js 中 JSON.parse 方法作用 js 中 JSON.parse 方法的使用场景

JSON.parse 在 JavaScript 中,它的核心作用就是把一个符合 JSON 格式的字符串转换成 JavaScript 能够理解和操作的对象或值。简单来说,它就像一个翻译官,把网络上传输的、或者存储在本地的文本数据,转化成我们代码里能直接用的结构化数据。至于使用场景,那可就太多了,凡是涉及到数据交换的地方,它几乎无处不在。

js 中 JSON.parse 方法作用 js 中 JSON.parse 方法的使用场景

解决方案

JSON.parse 方法是 JavaScript 内置的全局对象 JSON 的一个成员,它的主要任务就是解析 JSON 字符串。当你的应用程序从服务器接收到数据,或者从本地存储(比如 localStorage)读取数据时,这些数据通常都是以字符串的形式存在的。而 JavaScript 需要的是对象、数组、数字、布尔值等原生数据类型,这时 JSON.parse 就登场了。

它会遍历这个 JSON 字符串,根据 JSON 语法规则,将其中的键值对、数组元素、数字、字符串、布尔值以及 null 准确地还原成对应的 JavaScript 类型。这个过程是严格的,如果输入的字符串不符合 JSON 规范,JSON.parse 就会抛出一个 SyntaxError 错误。所以,在使用它的时候,通常会配合 try...catch 语句来处理可能出现的解析失败情况,确保程序的健壮性。

js 中 JSON.parse 方法作用 js 中 JSON.parse 方法的使用场景

举个最基础的例子:

const jsonString = '{"name": "张三", "age": 30, "isStudent": false, "hobbies": ["reading", "coding"]}';

try {
    const jsObject = JSON.parse(jsonString);
    console.log(jsObject.name);      // 输出: 张三
    console.log(jsObject.age);       // 输出: 30
    console.log(jsObject.hobbies[0]);// 输出: reading
} catch (error) {
    console.error("解析 JSON 字符串时出错:", error);
}

// 尝试解析一个不合法的 JSON 字符串
const invalidJsonString = '{name: "李四"}'; // 键名没有双引号,不合法

try {
    const invalidJsObject = JSON.parse(invalidJsonString);
    console.log(invalidJsObject);
} catch (error) {
    console.error("解析不合法 JSON 字符串时出错:", error.message); // 输出: 解析不合法 JSON 字符串时出错: Expected property name or '}' in JSON at position 1
}

什么时候会用到 JSON.parse 方法?

在我看来,JSON.parse 最核心也最频繁的使用场景,就是进行跨系统或跨页面数据通信的时候。你可能会发现,几乎所有现代 Web 应用的数据交换,都离不开它。

js 中 JSON.parse 方法作用 js 中 JSON.parse 方法的使用场景
  • 与后端 API 交互: 这是最常见的场景了。当你的前端页面通过 fetchXMLHttpRequest 向后端服务器发送请求,服务器返回的数据(通常是 JSON 格式的字符串)需要被前端 JavaScript 代码理解和操作时,JSON.parse 就是那个必不可少的步骤。比如,你从一个用户列表接口获取到一大串用户数据,它就是个字符串,你需要 parse 一下才能遍历、筛选。
  • 本地存储数据(localStoragesessionStorage): 浏览器提供的 localStoragesessionStorage 只能存储字符串类型的数据。如果你想在这些地方存储复杂的 JavaScript 对象(比如一个用户的配置信息,或者购物车里的商品列表),你就得先用 JSON.stringify 把对象转换成 JSON 字符串存进去,等下次需要用的时候,再用 JSON.parse 把它还原成对象。这就像打包和解包的过程。
  • Web Workers 或 Service Workers 之间的数据传递: 在 Web Workers 这种多线程环境中,或者 Service Workers 进行离线缓存和消息传递时,数据也需要序列化成字符串才能在不同的执行上下文之间传递。接收方同样需要 JSON.parse 来反序列化。
  • 处理配置文件或数据文件: 有些客户端应用可能会将配置信息或某些静态数据以 JSON 字符串的形式存储在文件中,当应用启动或需要这些数据时,就会读取文件内容(字符串),然后用 JSON.parse 转换成 JavaScript 对象来使用。

总而言之,只要你从某个地方拿到了一个看起来像 JSON 的字符串,并且想把它变成 JavaScript 里能直接点来点去的对象或数组,那 JSON.parse 几乎就是你的不二之选。

jquery带商品分类侧边栏列表的商城导航菜单
jquery带商品分类侧边栏列表的商城导航菜单

这是一款使用jquery制作的带商品分类侧边栏列表的商城导航菜单。该商城菜单兼容ie8浏览器。用户可以通过点击左侧的下拉菜单来查看各种商品的列表,非常实用和方便。 使用方法 在页面中引入样式文件style.css和jquery.min.js文件。

下载

使用 JSON.parse 时,有哪些坑要避开?

说实话,我刚开始用的时候,也经常被一些莫名其妙的错误搞得焦头烂额。这些“坑”大部分都和输入的字符串不符合 JSON 规范有关,但也有一些是使用上的误区。

  • 输入不是有效的 JSON 字符串: 这是最常见也是最容易犯的错误。JSON 格式有严格的规定:
    • 所有的键名都必须用双引号包围,不能用单引号,也不能没有引号。
    • 字符串值也必须用双引号包围。
    • 不能有未转义的特殊字符(如换行符、制表符等,需要用 \n, \t 转义)。
    • 对象或数组的最后一个元素后面不能有多余的逗号(尾随逗号在某些 JavaScript 环境中允许,但在严格 JSON 中是不允许的)。
    • 不能包含 JavaScript 注释。
    • 不能包含 undefined、函数、Symbol 等 JavaScript 特有的值(JSON.stringify 会忽略这些,JSON.parse 遇到这些是无法解析的)。 遇到这些情况,JSON.parse 会直接抛出 SyntaxError。所以,始终用 try...catch 包裹 JSON.parse 调用是黄金法则。
  • nullundefined 的误解: JSON.parse("null") 会得到 JavaScript 的 null 值,这是符合预期的。但如果你尝试 JSON.parse("undefined") 或者 JSON.parse("function(){}"),那就会报错,因为 undefined 和函数都不是合法的 JSON 值。记住,JSON 只有对象、数组、字符串、数字、布尔值和 null
  • 安全隐患(与 eval()区别): 早期 JavaScript 中,人们可能会用 eval() 函数来解析字符串。但 eval() 是极其危险的,因为它会执行传入的任何 JavaScript 代码。如果你的 JSON 字符串来自不可信的源,并且你用 eval() 去解析它,恶意代码就有可能被执行。JSON.parse 则不然,它只会解析 JSON 结构,不会执行任何代码,因此它是处理外部数据时更安全的选择。这是非常重要的一个点,尤其是在处理用户输入或第三方数据时。
  • 性能考量: 对于非常巨大的 JSON 字符串(比如几百 MB),JSON.parse 可能会消耗较多的内存和 CPU 时间,导致页面卡顿甚至崩溃。在这种极端情况下,可能需要考虑流式解析(streaming parsing)或其他更高级的数据处理策略,但这通常超出了日常 Web 开发的范畴。

除了基本用法,它还有什么隐藏技能?

JSON.parse 确实有一个不太常用但非常强大的“隐藏技能”——那就是它的第二个参数,一个可选的 reviver 函数。这个 reviver 函数允许你在解析过程中对每个键值对进行转换处理,就像一个“复活器”一样,在数据被完全解析成 JavaScript 对象之前,给你一个机会去“改造”它们。

这个 reviver 函数会在解析过程中,针对每个键值对(包括嵌套对象和数组中的所有值)被调用一次。它的签名是 function(key, value),并期望返回一个值,这个返回值将替代原始的 value。如果 reviver 返回 undefined,那么对应的键值对就会从最终的对象中删除。

最经典的用法就是处理日期字符串。JSON 标准中没有 Date 类型,日期通常以 ISO 8601 格式的字符串表示。当 JSON.parse 拿到这些字符串时,它只会把它们当作普通字符串。但很多时候,我们希望它们能直接变成 JavaScript 的 Date 对象,方便进行日期操作。这时 reviver 就派上用场了:

const dataWithDateString = '{"productName": "笔记本电脑", "price": 8999, "manufactureDate": "2023-10-26T10:00:00.000Z"}';

const parsedData = JSON.parse(dataWithDateString, (key, value) => {
    // 检查值是否是符合 ISO 格式的日期字符串
    // 这是一个简单的正则判断,实际应用中可能需要更严谨的日期判断逻辑
    if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value)) {
        const date = new Date(value);
        // 确保解析成功且是有效日期
        if (!isNaN(date.getTime())) {
            return date;
        }
    }
    return value; // 返回原始值,如果没有匹配到日期字符串
});

console.log(parsedData.productName);        // 输出: 笔记本电脑
console.log(parsedData.manufactureDate);    // 输出: Mon Oct 26 2023 ... (一个 Date 对象)
console.log(parsedData.manufactureDate instanceof Date); // 输出: true

// 你现在可以直接对日期对象进行操作了
console.log(parsedData.manufactureDate.getFullYear()); // 输出: 2023

除了日期转换,reviver 还可以用于:

  • 类型转换: 比如将某些特定的数字字符串转换为真正的数字类型,或者将 true/false 字符串转换为布尔值(尽管 JSON 本身支持布尔值,但在某些非标准场景下可能遇到)。
  • 数据过滤或修改: 在解析过程中移除不需要的字段,或者对某些字段的值进行统一的格式化。
  • 处理自定义复杂类型: 如果你的 JSON 包含了一些自定义的序列化格式(例如,一个表示地理坐标的字符串),你可以用 reviver 将其转换回自定义的对象实例。

这个功能,说实话,我用的不多,但偶尔遇到特定场景,它简直是救星。它提供了一个非常优雅的方式来在数据进入 JavaScript 环境的“大门”时,就对其进行预处理和清洗,而不是在解析完成后再进行二次遍历和转换。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

419

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

535

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

309

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

236

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

458

2024.03.01

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

391

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何进行WebSocket调试
如何进行WebSocket调试

共1课时 | 0.1万人学习

TypeScript全面解读课程
TypeScript全面解读课程

共26课时 | 5.1万人学习

前端工程化(ES6模块化和webpack打包)
前端工程化(ES6模块化和webpack打包)

共24课时 | 5.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号