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/zh-tw/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

發表回復

登錄後才能評論