日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【JavaScript】在JavaScript中使用JSON进行序列化/反序列化操作

發布時間:2025/3/15 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【JavaScript】在JavaScript中使用JSON进行序列化/反序列化操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 用于stringfy/parse操作的"JSON"對象
  • JavaScript中簡單數據類型的JSON序列化操作
  • 使用toJSON()進行對象的序列化操作
  • 使用eval()進行JSON的反序列化操作
  • 使用JSON.parse()進行JSON的反序列化操作

用于stringfy/parse操作的"JSON"對象

JavaScript中有“JSON”對象,該對象提供以下方法:

  • JSON.stringfy():將信息序列化為JSON
  • JSON.parse() :將JSON反序列化為JavaScript可理解的數據結構

該對象還具有以下特征:

  • 最初由 Douglas Crockford 所開發
  • 無法實例化
  • 除了stringfy()和parse()以外不提供其他功能

JavaScript中簡單數據類型的JSON序列化操作

來看看JavaScript中下列基礎數據的序列化操作:

  • 數值
  • 字符串
  • 數組
  • 布爾值
  • 字面量對象

下面的代碼展示了如何使用JSON.stringfy()來序列化簡單數據類型:

let age = 39; // 整數 console.log('age = ' + JSON.stringify(age) + '\n');let fullName = 'LeBron James'; // 字符串 console.log('fullName = ' + JSON.stringify(fullName) + '\n');let tags = ['json', 'rest', 'api', 'oauth']; // 數組 console.log('tags = ' + JSON.stringify(tags) + '\n');let reqistered = true; // 布爾 console.log('registered = ' + JSON.stringify(reqistered) + '\n');let speaker = {firstName: 'LeBron',lastName: 'James',email: 'lbj@gmail.com',about: '...',company: 'USA',tags: ['json', 'rest', 'api', 'oauth'],registered: true };console.log('speaker = ' + JSON.stringify(speaker));

上面的代碼可以在安裝Node.js后用node命令在命令行運行。

對于標量類型(數值、字符串、布爾值),JSON.stringify()并沒有提供什么有趣的功能。
但是對于speaker這種對象字面量來說,JSON.stringify()會生成一段駁雜卻合法的JSON字符串,因此顯得比較有用。

JSON.stringify()還可以接受其他參數,從而讓程序序列化操作變得更加強大。
具體語法規則:

JSON.stringify(value[, replacer[, space]])

參數列表:

  • value(必選)
    需要進行序列化的JavaScript值。
  • replacer(可選)
    函數 或者數組。如果是函數,stringify()會為value對象中的每個名稱-值對調用replacer。
  • space(可選)
    數值或者字符串,表示縮進。如果是數值,則表示每一級縮進所占的空格數。

下面的例子展示了replacer和space參數的使用,該實例優化了speaker對象的顯示,同時也展示了對數據元素的過濾操作:

let speaker = {firstName: 'LeBron',lastName: 'James',email: 'lbj@gmail.com',about: '...',company: 'USA',tags: ['json', 'rest', 'api', 'oauth'],registered: true };function serializeSpeaker(key, value) {return (typeof value === 'string' || Array.isArray(value)) ? undefined : value; }console.log('Speaker (pretty print):\n' + JSON.stringify(speaker, null, 2) + '\n');// 打印并過濾掉字符串和數組 console.log('Speaker without Strings and Arrays:\n' +JSON.stringify(speaker, serializeSpeaker, 2));

使用toJSON()進行對象的序列化操作

JSON序列化操作最應該適用于對象。
可以通過向speaker對象中添加toJSON()方法來定義JSON.stringify()的輸出結果:

let speaker = {firstName: 'LeBron',lastName: 'James',email: 'lbj@gmail.com',about: '...',company: 'USA',tags: ['json', 'rest', 'api', 'oauth'],registered: true };speaker.toJSON = function() {return 'Hi there!'; };// 序列化 console.log('speaker.toJSON(): ' + JSON.stringify(speaker, null, 2));

如果一個對象有toJSON方法,則JSON.stringify()不再試圖將其轉換為字符串,而是直接輸出該對象的toJSON()方法所返回的值。使用toJSON()方法是合法的,但不一定明智。因為一旦使用了toJSON()方法,開發者就必須自行承擔對整個對象結構的序列化操作,而這完全違背了JSON.stringify()的初衷。對于speaker這樣的簡單對象來說,可能沒有什么問題,但對于包含其他對象的復雜對象來說,相關序列化代碼遲早會變得十分復雜。

使用eval()進行JSON的反序列化操作

不推薦!

JavaScript開發者最早是采用eval()函數來解析JSON的。

eval()可以接收一個字符串作為參數。這個字符串可以是一個JavaScript表達式,一句JavaScript語句,或者一連串JavaScript語句。

let x = '{ "sessionDate": "2020-10-06T13:30:00.000Z" }';console.log('Parse with eval(): ' + eval('(' + x + ')').sessionDate + '\n');console.log('Parse with JSON.parse(): ' + JSON.parse(x).sessionDate);

上述程序中eval()和JSON.parse()執行結果相同,都解析了日期屬性。請接著看:

let x = '{ "sessionDate": new Date() }';console.log('Parse with eval(): ' + eval('(' + x + ')').sessionDate + '\n');console.log('Parse with JSON.parse(): ' + JSON.parse(x).sessionDate);

上述示例的文本參數含有new Date()這一條JavaScript語句,而eval()成功執行了;JSON.parse()則成功拒絕了這一參數并報錯參數非法。

如果嵌入語句中含有惡意代碼,eval()可能也會繼續執行,eval()會打開允許任何JavaScript表達式進入的后門,這會使得程序更易受到攻擊。因此盡管eval()可以用于解析JSON,但一般不安全,也不合適。

JavaScript對JSON的解析廢棄了eval()函數,取而代之的是下面的JSON.parse()。

使用JSON.parse()進行JSON的反序列化操作

// 多行JSON字符串 let json = '{' +'"firstName": "LeBron",' +'"lastName": "James",' +'"email": "lbj@gmail.com",' +'"about": "...",' +'"company": "USA",' +'"tags": [' +'"json",' +'"rest",' +'"api",' +'"oauth"' +'],' +'"registered": true' + '}';// 反序列化 let speaker = JSON.parse(json);console.log('speaker.firstName = ' + speaker.firstName);

JSON.parse()接受一個JSON字符串作為輸入,并將其解析為完整的JavaScript對象。

總結

以上是生活随笔為你收集整理的【JavaScript】在JavaScript中使用JSON进行序列化/反序列化操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。