JavaScript JSON对象转字符串

一、JSON对象简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript语法,但与之不同,它可以被解析为一种独立于语言的数据类型。

JSON由两种结构组成:键值对和数组。键值对由属性名称和属性值组成,用冒号分隔;数组由一组值组成,用逗号分隔。属性名必须是字符串,属性值可以是字符串、数字、对象、数组、布尔值或者null。

二、JSON对象转字符串的常用方法

1. JSON.stringify()

JSON.stringify()是将JSON对象转为字符串的主要方法,它可以接收三个参数:要转换的对象、转换函数以及每个属性对应的缩进。

let obj = {name: "Tom", age: 18};
let str1 = JSON.stringify(obj);
// str1: {"name":"Tom","age":18}

let str2 = JSON.stringify(obj, ["name"]);
// str2: {"name":"Tom"}

let str3 = JSON.stringify(obj, null, 2);
// str3: {
//     "name": "Tom",
//     "age": 18
// }

第一个参数是要转换的对象;第二个参数是转换函数或数组;第三个参数表示对缩进进行定义,它可以设置为数字或字符串,代表缩进的空格数或其他字符。

2. JSON.parse()

JSON.parse()是将JSON字符串转为对象的主要方法,它只接收一个参数,即要转换的JSON字符串。

let str = '{"name":"Tom","age":18}';
let obj = JSON.parse(str);
// obj: {name: "Tom", age: 18}

需要注意的是,JSON字符串必须符合语法规范,否则将会抛出语法错误。

3. 组合使用 JSON.stringify() 和 JSON.parse()

有时候,我们需要将一个对象先转成JSON字符串,然后再将JSON字符串转回对象,这个时候我们就可以使用JSON.stringify()和JSON.parse()组合使用。

let obj = {name: "Tom", age: 18};
let str = JSON.stringify(obj);
// str: {"name":"Tom","age":18}
let newObj = JSON.parse(str);
// newObj: {name: "Tom", age: 18}

三、JSON字符串转义

在JSON字符串中,有一些字符需要进行转义,例如双引号、反斜杠等。JSON.stringify()方法可以自动进行转义,而JSON.parse()方法会自动将转义字符还原。

let obj = {
  name: "Tom",
  description: "He said, \"I'm happy.\"",
  path: "C:\\Program Files\\",
  date: new Date()
};
let str = JSON.stringify(obj);
// str: {"name":"Tom","description":"He said, \"I'm happy.\"","path":"C:\\\\Program Files\\\\"}
let newObj = JSON.parse(str);
// newObj: {name: "Tom", description: "He said, "I'm happy."", path: "C:\Program Files\", date: "2021-08-03T09:02:41.414Z"}

四、JSON字符串格式化

当JSON字符串比较长或者嵌套层数比较深时,阅读起来会比较困难。这个时候,我们可以对JSON字符串进行格式化,使其更加易读。

let obj = {
  name: "Tom",
  age: 18,
  friend: {
    name: "Jerry",
    age: 20
  },
  skills: ["JavaScript", "HTML", "CSS"]
};
let str = JSON.stringify(obj, null, 2);
console.log(str);
// {
//   "name": "Tom",
//   "age": 18,
//   "friend": {
//     "name": "Jerry",
//     "age": 20
//   },
//   "skills": [
//     "JavaScript",
//     "HTML",
//     "CSS"
//   ]
// }

第二个参数设置为2,表示缩进两个空格。

五、JSON对象转字符串——常见问题

1. 循环引用问题

JSON.stringify()方法在遇到循环引用时会报错,如下所示:

let obj = {name: "Tom", age: 18};
obj.friend = obj;
let str = JSON.stringify(obj); // 报错

我们可以通过手动移除循环引用或者添加 toJSON()方法来解决循环引用问题。

// 手动移除循环引用
let obj = {name: "Tom", age: 18};
let friend = {name: "Jerry", age: 20};
obj.friend = friend;
friend.friend = obj;
friend.friend = undefined;
let str = JSON.stringify(obj); // 正常

// 添加toJSON()方法
let obj = {name: "Tom", age: 18};
obj.friend = obj;
obj.toJSON = function() {
  let newObj = Object.assign({}, this);
  newObj.friend = undefined;
  return newObj;
}
let str = JSON.stringify(obj); // 正常

2. 对象属性顺序问题

JSON.stringify()方法默认情况下会按照属性名称的字母顺序进行排列。如果希望按照自己设置的顺序进行排列,可以传入一个数组。

let obj = {name: "Tom", age: 18};
let str = JSON.stringify(obj, ["age", "name"]);
// str: {"age":18,"name":"Tom"}

3. NaN 和 Infinity 问题

JSON.stringify()方法不能正确处理NaN和Infinity这两个特殊值。可以通过定义 toJSON()方法来解决这个问题。

let obj = {name: "Tom", age: NaN, height: Infinity};
obj.toJSON = function() {
  let newObj = Object.assign({}, this);
  for (let prop in obj) {
    if (isNaN(obj[prop])) {
      newObj[prop] = null;
    }
    if (obj[prop] === Infinity) {
      newObj[prop] = "Infinity";
    }
    if (obj[prop] === -Infinity) {
      newObj[prop] = "-Infinity";
    }
  }
  return newObj;
}
let str = JSON.stringify(obj);
// str: {"name":"Tom","age":null,"height":"Infinity"}

六、结语

本文主要介绍了JSON对象转字符串的常用方法,以及JSON字符串的转义和格式化问题,同时还对JSON对象转字符串过程中常见问题进行了分析和解决。

读者可以通过实践,更加深入地理解JSON对象转字符串的原理和应用。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/286994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-23 13:07
下一篇 2024-12-23 13:07

相关推荐

  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • Python中将字符串转化为浮点数

    本文将介绍在Python中将字符串转化为浮点数的常用方法。在介绍方法之前,我们先来思考一下这个问题应该如何解决。 一、eval函数 在Python中,最简单、最常用的将字符串转化为…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • Python学习笔记:去除字符串最后一个字符的方法

    本文将从多个方面详细阐述如何通过Python去除字符串最后一个字符,包括使用切片、pop()、删除、替换等方法来实现。 一、字符串切片 在Python中,可以通过字符串切片的方式来…

    编程 2025-04-29
  • JSON的MD5

    在Web开发过程中,JSON(JavaScript Object Notation)是最常用的数据格式之一。MD5(Message-Digest Algorithm 5)是一种常用…

    编程 2025-04-29
  • 使用Java将JSON写入HDFS

    本篇文章将从以下几个方面详细阐述Java将JSON写入HDFS的方法: 一、HDFS简介 首先,先来了解一下Hadoop分布式文件系统(HDFS)。HDFS是一个可扩展性高的分布式…

    编程 2025-04-29
  • 面向对象编程、类和对象

    面向对象编程(Object-Oriented Programming, OOP)是一种编程方法,它将现实世界中的事物抽象为对象(Object),对象的属性和方法被封装成类(Clas…

    编程 2025-04-29
  • Python如何将字符串1234变成数字1234

    Python作为一种广泛使用的编程语言,对于数字和字符串的处理提供了很多便捷的方式。如何将字符串“1234”转化成数字“1234”呢?下面将从多个方面详细阐述Python如何将字符…

    编程 2025-04-29
  • Python int转二进制字符串

    本文将从以下几个方面对Python中将int类型转换为二进制字符串进行详细阐述: 一、int类型和二进制字符串的定义 在Python中,int类型表示整数,二进制字符串则是由0和1…

    编程 2025-04-29
  • 用title和capitalize美观处理Python字符串

    在Python中,字符串是最常用的数据类型之一。对字符串的美观处理是我们在实际开发中经常需要的任务之一。Python内置了一些方法,如title和capitalize,可以帮助我们…

    编程 2025-04-28

发表回复

登录后才能评论