JS之JSON.stringfy和JSON.parse

JSON.stringifyJSON.parse 是 JavaScript 中用于处理 JSON 数据的两个非常重要的方法。它们分别用于将 JavaScript 对象转换为 JSON 字符串,以及将 JSON 字符串解析为 JavaScript 对象。

JSON.stringify

JSON.stringify 方法用于将一个 JavaScript 值(通常是对象或数组)转换为 JSON 字符串。这在需要将数据发送到服务器或存储在本地时非常有用。

语法
JSON.stringify(value[, replacer[, space]])
  • value:要转换成 JSON 字符串的 JavaScript 值。
  • replacer(可选):一个函数或数组,用于选择性地替换值或过滤属性。
  • space(可选):用于控制缩进和空格的字符串或数字,使生成的 JSON 字符串更易读。
示例
const obj = {name: "Alice",age: 25,hobbies: ["reading", "swimming"]
};// 基本用法
const jsonString = JSON.stringify(obj);
console.log(jsonString); // 输出: {"name":"Alice","age":25,"hobbies":["reading","swimming"]}// 使用 replacer 函数
const jsonStringWithReplacer = JSON.stringify(obj, (key, value) => {if (key === "age") {return undefined; // 过滤掉 age 属性}return value;
});
console.log(jsonStringWithReplacer); // 输出: {"name":"Alice","hobbies":["reading","swimming"]}// 使用 space 参数
const prettyJsonString = JSON.stringify(obj, null, 2);
console.log(prettyJsonString);
/* 输出:
{"name": "Alice","age": 25,"hobbies": ["reading","swimming"]
}
*/

JSON.parse

JSON.parse 方法用于将 JSON 字符串解析为 JavaScript 对象。这在从服务器接收 JSON 数据或从本地存储读取 JSON 数据时非常有用。

语法
JSON.parse(text[, reviver])
  • text:要解析的 JSON 字符串。
  • reviver(可选):一个函数,用于在返回最终结果之前对解析出的对象进行修改。
示例
const jsonString = '{"name":"Alice","age":25,"hobbies":["reading","swimming"]}';// 基本用法
const obj = JSON.parse(jsonString);
console.log(obj); // 输出: { name: 'Alice', age: 25, hobbies: [ 'reading', 'swimming' ] }// 使用 reviver 函数
const objWithReviver = JSON.parse(jsonString, (key, value) => {if (key === "age") {return value * 2; // 修改 age 属性}return value;
});
console.log(objWithReviver); // 输出: { name: 'Alice', age: 50, hobbies: [ 'reading', 'swimming' ] }

注意事项

  1. 循环引用:如果对象中存在循环引用,JSON.stringify 会抛出错误。例如:

    const obj = {};
    obj.self = obj;
    console.log(JSON.stringify(obj)); // 抛出 TypeError: Converting circular structure to JSON
    
  2. 非标准类型JSON.stringify 不能处理一些非标准的 JavaScript 类型,如 undefined、函数和 Symbol。这些值会被忽略或转换为 null

  3. 日期类型:日期对象会被转换为 ISO 格式的字符串。如果你希望以其他格式处理日期,可以使用 replacer 函数。

  4. reviver 函数reviver 函数在解析过程中逐个键值对调用,可以用来修改解析后的对象。

总结

  • JSON.stringify 将 JavaScript 对象转换为 JSON 字符串。
  • JSON.parse 将 JSON 字符串解析为 JavaScript 对象。
  • 可以通过 replacerreviver 函数来定制转换和解析过程。
  • 注意处理循环引用和非标准类型的特殊情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构演进史

软件架构是软件工程的基石,它不仅影响着系统的性能、可维护性和可扩展性,也直接关系到开发团队的效率和项目的成功。随着技术的不断发展和业务需求的变化,软件架构经历了多个阶段的演进。本文将详细探讨这些阶段及其背后的驱动因素。 1. 单体…

【Flutter】基础入门:自定义Widget

在 Flutter 开发中,除了使用丰富的内置 Widgets 构建界面外,自定义 Widget 是让你的应用更灵活和个性化的重要手段。Flutter 允许你根据需求自定义 StatelessWidget 和 StatefulWidget,以实现复杂的 UI 组件或功能模块。 本教程将通过实例讲…

GB/T28181-2022规范解读、应用场景和技术实现探究

GB/T28181-2022和GB/T28181-2016区别 GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》与 GB/T28181-2016 相比,主要有以下区别: 术语和定义方面: 术语删减:GB/T28181-2022 删除了 “联网系统信息”“数…

Win安装Redis

目录 1、下载 2、解压文件并修改名称 3、前台简单启动 4、将redis设置成服务后台启动 5、命令启停redis 6、配置文件设置 1、下载 【下载地址】 2、解压文件并修改名称 3、前台简单启动 redis-server.exe redis.windows.conf 4、将redis设置成服务后台启动 redis-server -…

pikachu靶场CSRF-post测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、抓包使用burp生成csrf脚本 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机:本机(127.0.0.1) 靶 机:本机(127.0.0.1) 2、使用工具/软件 Burp sui…

java实现动态切换数据源的注解@DS

DS 注解通常用于多数据源的 Spring 项目中,主要作用是动态切换数据源。通过这个注解,你可以在运行时根据需求选择不同的数据库连接。 Mapper DS("master") public interface BaseDataCarrierExamineMapper {/*** 查询承运商考核** param id 承…

老机MicroServer Gen8再玩 OCP万兆光口+IT直通

手上有一台放了很久的GEN8微型服务器,放了很多年,具体什么时候买的我居然已经记不清了 只记得开始装修的时候搬家出去就没用了,结果搬出去有了第1个孩子,孩子小的时候也没时间折腾,等孩子大一点的时候,又有…

【去哪儿-注册安全分析报告-缺少轨迹的滑动条】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

RabbitMQ service is already present - only updating service parameters

Windows下卸载RabbitMQ之后,然后重新注册RabbitMQ服务的时候,报错以下信息: D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin>D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin\rabbitmq-service.bat install RabbitMQ service is already …

kafka自定义配置信息踩坑

org.apache.kafka.common.config.ConfigException: Invalid value 0 for configuration acks: Expected value to be a string, but it was a java.lang.Integer 场景描述: 单个kafka使用springboot框架自带的 yml 配置完全OK(因为底层会帮我们处理好类…

调查显示软件供应链攻击增加

OpenText 发布了《2024 年全球勒索软件调查》,强调了网络攻击的重要趋势,特别是在软件供应链中,以及生成式人工智能在网络钓鱼诈骗中的使用日益增多。 尽管各国政府努力加强网络安全措施,但调查显示,仍有相当一部分企…

CentOS7安装RabbitMQ-3.13.7、修改端口号

本文安装版本: Erlang:26.0 官网下载地址 Erlang RabbitMQ:3.13.7 官网下载地址 RabbitMQ RabbitMQ和Erlang对应关系查看:https://www.rabbitmq.com/which-erlang.html 注:安装erlang之前先安装下依赖文件&#xff0…

【Qt】控件——Qt多元素控件、常见的多元素控件、多元素控件的使用、List Widget、Table Widget、Tree Widget

文章目录 QtQt多元素控件List WidgetTable WidgetTree Widget Qt Qt多元素控件 List Widget 使用 QListWidget 能够显示一个纵向的列表。 属性说明currentRow当前被选中的是第几行。count一共有多少行。sortingEnabled是否允许排序。isWrapping是否允许换行。itemAlignment元素…

k8s中如何将pod的标准输出日志输出到一个文件

假设容器的启动命令是 grpcserver,我们将通过修改启动命令,将 grpcserver 的标准输出重定向到指定的日志文件 /var/log/app/grpcserver.log,同时保留标准输出以便 Kubernetes 日志系统仍然能够捕获日志。 目标: 将 grpcserver 的…

Tomcat日志文件详解及catalina.out日志清理方法

目录 前言1. Tomcat日志文件详解1.1 catalina.out1.2 localhost_access_log1.3 catalina.<date>.log1.4 host-manager.<date>.log 和 manager.<date>.log1.5 localhost.<date>.log 2. catalina.out文件管理与清理方法2.1 为什么不能直接删除catalina.o…

【火山引擎】AIGC图像风格化 | 风格实践 | PYTHON

目录 1 准备工作 2 实践 代码 效果图 1 准备工作 ① 服务开通 确保已开通需要访问的服务。您可前往火山引擎控制台,在左侧菜单中选择或在顶部搜索栏中搜索需要使用的服务,进入服务控制台内完成开通流程。

开发工具(上)

前面我们在Linux部分了解文件权限&#xff0c;和基本指令的内容&#xff0c;但对于开发工具还是没有很多的接触&#xff0c;现在这一篇就是主要讲基础的工具&#xff1b;如yum&#xff0c;yum源&#xff0c;包管理器等等&#xff1b; Linux中的安装软件&#xff1a; 源码安装 …

Proximal Distance Algorithm (近段距离算法)

文章目录 第一篇\section*{近端距离算法&#xff08;Proximal Distance Algorithm&#xff09;详解}\subsection*{1. MM原理&#xff08;Majorization-Minimization Principle&#xff09;}\subsection*{2. 近端距离算法&#xff08;Proximal Distance Algorithm&#xff09;}\…

JAVA——IO流(2)

目录 1.缓冲流 a.字节缓冲流 1.构造方法 2.常见方法 3.底层原理 b.字符缓冲流 1.构造方法 2.特有方法 2.转换流 a.概述 b.编码问题 c.InputStreamReader类 1.概述 2.构造方法 d.OutputStreamWrite类 1.概述 2.构造方法 3.序列化流 a.概述 b.ObjectOutputStr…

TCP的建立与终止——三次握手、四次挥手

目录 1. UDP和TCP的区别 2. TCP概述 3. TCP连接的建立&#xff08;三次握手&#xff09; 3.1 为什么TCP客户端最后还要发送一次确认&#xff1f; 3.2 什么是半连接队列&#xff1f; 3.3 半连接队列被填满或遇到SYN洪泛攻击是如何处理&#xff1f; 3.4 三次握手过程中可以…