JSON.parse() 方法與$.parseJSON()以及JSON.stringify()區別


1 JSON.parse()

JSON.parse() 方法解析一個JSON字符串

參數

text
要被解析成JavaSctipt值的字符串
reviver  可選
如果是一個函數,則規定了原始值如何被解析改造,在被返回之前。

返回值

對應給定的JSON文本。

 

2jQuery.parseJSON()函數

用於將格式完好的JSON字符串轉為與之對應的JavaScript對象

所謂"格式完好",就是要求指定的字符串必須符合嚴格的JSON格式,例如:屬性名稱必須加雙引號、字符串值也必須用雙引號。

如果傳入一個格式不"完好"的JSON字符串將拋出一個JS異常,

例如:以下字符串均符合JSON格式,但它們不是格式完好的JSON字符串(因此會拋出異常):

// 以下均是字符串值,省略了兩側的引號,以便於展現內容

{id: 1} // id是屬性名稱,必須加雙引號
{'id': 1} // id是屬性名稱,必須用雙引號(不能用單引號)
{"name": 'CodePlayer'} // name屬性的值是字符串,必須用雙引號(不能用單引號)

以下是與jQuery.parseJSON()函數相關的jQuery示例代碼,以演示jQuery.parseJSON()函數的具體用法:

var result1 = $.parseJSON( "{}" ); // 一個空的Object對象

var result2 = $.parseJSON( '{ "name": "CodePlayer", "age": 1 }' ); // 一個Object對象
alert( result2.name ); // CodePlayer

var result3 = $.parseJSON( '[ 1, true, "CodePlayer" ]' ); // 一個Object對象
alert( result3[2] ); // CodePlayer

var result4 = $.parseJSON( 'true' ); // 布爾值:true

var result5 = $.parseJSON( 'null' ); // null

var result6 = $.parseJSON( '0' ); // 整數:0

var result7 = $.parseJSON( '"專注於編程開發技術分享"' ); // 字符串值:專注於編程開發技術分享

var result8 = $.parseJSON( "\"專注於編程開發技術分享\"" ); // 字符串值:專注於編程開發技術分享


/* 以下均是無效的JSON字符串或非常規的參數值 */

var result9 = $.parseJSON( 100 );  // 1.9之前返回null;1.9+返回100
var result10 = $.parseJSON( 1.23 );  // 1.9之前返回null;1.9+返回1.23
var result11 = $.parseJSON( true );  // 1.9之前返回null;1.9+返回true
var result12 = $.parseJSON( null );  // 返回null

var result13 = $.parseJSON( "" ); // 1.9之前返回null;1.9+拋出錯誤
var result14 = $.parseJSON( undefined );  // 1.9之前返回null;1.9+拋出錯誤

var result15 = $.parseJSON( "undefined" ); // 拋出錯誤
var result16 = $.parseJSON( "12x;xx'無效的JSON字符串x4546" ); // 拋出錯誤
var result17 = $.parseJSON( '{ name: "CodePlayer", age: 1 }' ); // 拋出錯誤
var result18 = $.parseJSON( '{ "name": \'CodePlayer\', "age": 1 }' ); // 拋出錯誤
var result19 = $.parseJSON( '{ "name": "Code\tPlayer\n" }' ); // 拋出錯

3 JSON.stringify()
JSON.stringify() 方法將JavaScript值轉換為JSON字符串

返回值 

一個表示給定值的JSON字符串。

描述EDIT

關於序列化,有下面五點注意事項:

  • 非數組對象的屬性不能保證以特定的順序出現在序列化后的字符串中。
  • 布爾值、數字、字符串的包裝對象在序列化過程中會自動轉換成對應的原始值。
  • undefined、任意的函數以及 symbol 值,在序列化過程中會被忽略(出現在非數組對象的屬性值中時)或者被轉換成 null(出現在數組中時)。
  • 所有以 symbol 為屬性鍵的屬性都會被完全忽略掉,即便 replacer 參數中強制指定包含了它們。
  • 不可枚舉的屬性會被忽略
JSON.stringify({}); // '{}' JSON.stringify(true); // 'true' JSON.stringify("foo"); // '"foo"' JSON.stringify([1, "false", false]); // '[1,"false",false]' JSON.stringify({ x: 5 }); // '{"x":5}' JSON.stringify({x: 5, y: 6}); // "{"x":5,"y":6}" JSON.stringify([new Number(1), new String("false"), new Boolean(false)]); // '[1,"false",false]' JSON.stringify({x: undefined, y: Object, z: Symbol("")}); // '{}' JSON.stringify([undefined, Object, Symbol("")]); // '[null,null,null]' JSON.stringify({[Symbol("foo")]: "foo"}); // '{}' JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]); // '{}' JSON.stringify( {[Symbol.for("foo")]: "foo"}, function (k, v) { if (typeof k === "symbol"){ return "a symbol"; } } ); // undefined // 不可枚舉的屬性默認會被忽略: JSON.stringify( Object.create( null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } } ) ); 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM