JSON.stringify()和JSON.parse()

2024-05-04 18:04
文章标签 json parse stringify

本文主要是介绍JSON.stringify()和JSON.parse(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JSON.stringify()

JSON.stringify() 是 JavaScript 中的一个内置方法,用于将一个 JavaScript 值(对象或值)转换为一个 JSON 字符串。这个方法对于在客户端和服务器之间传输数据特别有用,因为 JSON 是一种轻量级的数据交换格式,它基于文本,并且易于人阅读和编写,同时也易于机器解析和生成。

以下是一些 JSON.stringify() 的基本用法和示例:

基本用法

javascript复制代码const obj = {  name: 'John',  age: 30,  city: 'New York'  
};  const jsonString = JSON.stringify(obj);  
console.log(jsonString); // 输出: '{"name":"John","age":30,"city":"New York"}'

替换函数

你可以提供一个替换函数(replacer),用于在字符串化过程中过滤或转换数据:

javascript复制代码function replacer(key, value) {  if (typeof value === 'string') {  return undefined; // 过滤掉所有字符串  }  return value;  
}  const obj = {  name: 'John',  age: 30,  city: 'New York'  
};  const jsonString = JSON.stringify(obj, replacer);  
console.log(jsonString); // 输出: '{"age":30}'

缩进和空格

你可以使用第三个参数来指定缩进级别(或空格数):

javascript复制代码const obj = {  name: 'John',  age: 30,  city: 'New York'  
};  const prettyJsonString = JSON.stringify(obj, null, 2);  
console.log(prettyJsonString);  
// 输出:  
// {  
//   "name": "John",  
//   "age": 30,  
//   "city": "New York"  
// }

在这个例子中,我们传递了 null 作为第二个参数(因为我们不需要替换函数),并传递了 2 作为第三个参数,表示我们希望每个级别缩进两个空格。

注意事项

  • 循环引用(即对象属性直接或间接地引用自己)会导致 JSON.stringify() 抛出一个错误。
  • 函数和 undefined 会被 JSON.stringify() 忽略(在字符串化过程中不会包含它们)。
  • 对象的 getter 方法在字符串化过程中不会被调用。
  • 日期对象会被转换为一个字符串(按照 ISO 8601 格式)。
  • NaN 和 Infinity 会被替换为 null。
  • 数组和对象会被递归地字符串化。

希望这可以帮助你更好地理解 JSON.stringify() 方法!

JSON.parse()

JSON.parse() 是 JavaScript 中的一个内置方法,用于将一个 JSON 字符串转换回 JavaScript 对象或值。这个方法在处理从服务器接收到的 JSON 数据或在本地解析存储的 JSON 字符串时特别有用。

以下是一些 JSON.parse() 的基本用法和示例:

基本用法

javascript复制代码const jsonString = '{"name":"John","age":30,"city":"New York"}';  const obj = JSON.parse(jsonString);  
console.log(obj.name); // 输出: John  
console.log(obj.age);  // 输出: 30  
console.log(obj.city); // 输出: New York

处理错误

由于 JSON.parse() 在遇到无效的 JSON 字符串时会抛出一个错误,因此通常建议使用 try...catch 语句来捕获和处理这些错误:

javascript复制代码const jsonString = 'Invalid JSON string';  try {  const obj = JSON.parse(jsonString);  console.log(obj);  
} catch (error) {  console.error('An error occurred:', error);  
}

使用 reviver 函数

JSON.parse() 还接受一个可选的第二个参数,这是一个转换函数(通常被称为 reviver 函数),该函数可以在返回之前对解析的对象中的每个键值对进行处理:

javascript复制代码const jsonString = '{"name":"John","age":30,"city":"New York"}';  function reviver(key, value) {  if (key === 'age' && typeof value === 'number') {  return value + 1; // 将年龄增加 1  }  return value;  
}  const obj = JSON.parse(jsonString, reviver);  
console.log(obj.name); // 输出: John  
console.log(obj.age);  // 输出: 31  
console.log(obj.city); // 输出: New York

在这个例子中,reviver 函数在解析过程中检查了每个键值对。如果键是 'age' 并且值是数字类型,那么它返回的值将是原值加 1。

注意事项

  • 字符串必须是一个有效的 JSON 格式,否则 JSON.parse() 将抛出一个错误。
  • JSON 字符串中的属性名称必须用双引号(")括起来。使用单引号(')或没有引号都将导致解析错误。
  • 如果 JSON 字符串包含注释或尾随逗号,那么 JSON.parse() 将无法正确解析它,因为这些特性不是 JSON 标准的一部分。
  • JSON.parse() 只能解析 JSON 字符串,不能解析 JavaScript 对象字面量或表达式。例如,它不能解析 eval() 可以处理的代码字符串。

补充

当您尝试使用 JSON.parse() 解析一个无效的 JSON 字符串时,JavaScript 会抛出一个 SyntaxError。无效的 JSON 字符串可能包含以下常见问题:

  1. 字符串未用双引号括起来:在 JSON 中,所有的字符串必须使用双引号(")括起来,而不是单引号(')或没有引号。
json复制代码// 无效的 JSON  
{ name: 'John' }  // 有效的 JSON  
{ "name": "John" }
  1. 使用了 JavaScript 注释:JSON 不支持注释。
json复制代码// 无效的 JSON  
{  // 这是一个注释  "name": "John"  
}  // 有效的 JSON(没有注释)  
{  "name": "John"  
}
  1. 尾随逗号:JSON 对象或数组的最后一个元素后不应有逗号。
json复制代码// 无效的 JSON  
{  "name": "John",  "age": 30,  
}  // 有效的 JSON  
{  "name": "John",  "age": 30  
}
  1. 使用了 JavaScript 类型的标识符,如 true、false 或 null,但拼写错误或格式错误。
json复制代码// 无效的 JSON  
{  "active": True  
}  // 有效的 JSON  
{  "active": true  
}
  1. 数字格式错误,如使用逗号作为千位分隔符或包含非法字符。
json复制代码// 无效的 JSON  
{  "price": 1,000.50  
}  // 有效的 JSON  
{  "price": 1000.5  
}
  1. 使用了 JavaScript 的特殊值,如 undefined、function 或 NaN,这些都是 JSON 不支持的。
json复制代码// 无效的 JSON(尝试包含 JavaScript 类型的值)  
{  "value": undefined  
}  // 有效的 JSON(使用 null 表示空值)  
{  "value": null  
}
  1. 对象或数组的键名不是有效的字符串。
json复制代码// 无效的 JSON(键名不是字符串)  
{  age: 30  
}  // 有效的 JSON(键名是字符串)  
{  "age": 30  
}

如果您尝试解析一个无效的 JSON 字符串,您应该使用 try...catch 语句来捕获 SyntaxError 并适当地处理它。例如:

javascript复制代码const jsonString = '{ name: "John" }'; // 无效的 JSON  try {  const obj = JSON.parse(jsonString);  console.log(obj);  
} catch (error) {  console.error('JSON 解析错误:', error);  
}

在上面的示例中,因为 jsonString 是一个无效的 JSON 字符串,所以 JSON.parse() 会抛出一个 SyntaxError,该错误会被 catch 语句捕获并打印到控制台。

这篇关于JSON.stringify()和JSON.parse()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959791

相关文章

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

python dict转换成json格式的实现

《pythondict转换成json格式的实现》本文主要介绍了pythondict转换成json格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 一开始你变成字典格式data = [ { 'a' : 1, 'b' : 2, 'c编程' : 3,

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR