json.stringify()用於將JavaScript物件或值轉換為JSON字串,如果指定了一個replacer函數,則可以選擇性地替換值,或者指定的replacer是數組,則可選擇性地僅包含數組指定的屬性。
相關推薦:《javascript影片教學》
JavaScript JSON.stringify()
JSON.stringify() 方法用於將JavaScript 值轉換為JSON 字串。
語法
JSON.stringify(value[, replacer[, space]])
參數說明:
#value:必需, 要轉換的 JavaScript 值(通常為物件或陣列)。
replacer:可選。用於轉換結果的函數或陣列。
如果 replacer 為函數,則 JSON.stringify 將呼叫該函數,並傳入每個成員的鍵和值。使用傳回值而不是原始值。如果此函數傳回 undefined,則排除成員。根物件的鍵是一個空字串:""。
如果 replacer 是數組,則只轉換該數組中具有鍵值的成員。成員的轉換順序與鍵在陣列中的順序一樣。
space:可選,文字新增縮排、空格和換行符,如果space 是數字,則傳回值文字在每個層級縮排指定數目的空格,如果space大於10,則文字縮排10 個空格。 space 也可以使用非數字,如:\t。
傳回值:
傳回包含 JSON 文字的字串。
實例說明
注意:以下的輸出結果都是string類型的,為了容易看就沒有用單引號''表示是字串類型
1、只有一個參數
參數為物件:
var students = new Array(); students[0] = "pika"; students[1] = "hello"; students[2] = "hey"; var json = JSON.stringify(students); alert(json);
輸出結果:
["pika","hello","hey"]
如果不用JSON .stringify()函數,直接alert(students),那麼
輸出結果:
pika,hello,hey
從這裡到對比可以比較直觀的看出JSON.stringify()函數的作用啦
看其他範例:
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
從這些例子中可以看出:undefined、任意的函數以及symbol 值,在序列化過程中會被忽略(出現在非數組物件的屬性值中時)或被轉換成null(出現在數組中時)
再看最後一個例子
JSON.stringify( Object.create( null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } } ) );
從例子中可以看出:不可枚舉的屬性會被忽略
2、有兩個參數,第二個參數為函數
函數範例:
function replacer(key, value) { if (typeof value === "string") { return undefined; } return value; }
可以看出有一個key值,一個value值,還記得一開始說的第二個參數作key值嗎?
實例:
function replacer(key, value) { if (typeof value === "string") { return undefined; } return value; } var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7}; var jsonString = JSON.stringify(foo, replacer); //输出结果:{"week":45,"month":7}
就是把第一個值傳去函數進行相關的處理
2、有兩個參數,第二個參數為數組
第一個參數為陣列
var students = new Array(); students[0] = "pika"; students[1] = "hello"; students[2] = "hey"; var stu= new Array(); stu[0] = "how"; stu[1] = "are"; stu[2] = "u"; var json = JSON.stringify(students,stu); alert(json); //输出结果:["pika","hello","hey"]
結果是只有第一個值序列化了,第二個被忽略了
第一個參數為物件
var students = new Object(); students.name = "pika"; students.age = 19; students.qq = "12345678"; var stu= new Array(); stu[0] = "name"; stu[1] = "qq"; var json = JSON.stringify(students,stu); alert(json); //输出结果:{"name":"pika","qq":"12345678"}
陣列的值代表將被序列化成JSON字串的屬性名稱
stu陣列沒有“age”,所以students物件的“age”屬性沒有顯示
有三個參數
前面說到第三個參數就是用來縮排或直接加入字串在序列化物件的前面,所以直接看例子就行啦,注意最多只能10個縮排或字元
JSON.stringify({ a: 2 }, null, " "); // 输出结果:{\n "a": 2\n} JSON.stringify({ uno: 1, dos : 2 }, null, '\t') /* 输出结果: { "uno": 1, "dos": 2 } */ var students = new Object(); students.name = "pika"; students.age = 19; students.qq = "12345678"; var stu= new Array(); stu[0] = "name"; stu[1] = "qq"; var json = JSON.stringify(students,stu,"test") alert(json); /* 输出结果: { test"name": "pika", test"qq": "12345678" } */
總結
最後來總結一下,JSON.stringify()函數是用來序列化對象的,無論輸入什麼,輸出的都是字串類型,可以按自己的需求來定制如何序列化,輸出結果是怎樣的格式
更多編程相關知識,請訪問:編程學習! !
以上是json.stringify()是幹嘛的的詳細內容。更多資訊請關注PHP中文網其他相關文章!