JSON.parse()【從一個字符串中解析出json對象】html
例子:json
//定義一個字符串數組
var data='{"name":"goatling"}'函數
//解析對象spa
JSON.parse(data).net
結果是:htm
name:"goatling"對象
JSON.stringify()【從一個對象中解析出字符串】blog
var data={name:'goatling'}字符串
JSON.stringify(data)
結果是:
'{"name":"goatling"}'
原文:https://blog.csdn.net/pika_lzy/article/details/79212476?utm_source=copy
語法
JSON.stringify(value[, replacer [, space]])
value
將要序列化成 一個JSON 字符串的值。
replacer 可選
能夠爲數組或函數
若是爲數組:則只有包含在這個數組中的屬性名纔會被序列化到最終的 JSON 字符串中,replacer做key值(這個在講實例的時候就知道這個key是幹嗎的了,先記住就好)
若是爲函數:則把系列化後的每個對象(記住是每個)傳進方法裏面進行處理
space 可選
指定縮進用的空白字符串
若是省略的話,那麼顯示出來的值就沒有分隔符。直接輸出來
若是是一個數字的話,那麼它就定義縮進幾個字符,範圍是:0到10(數字小於1,則默認爲0,大於10,則默認爲10)
若是是一些轉義字符,好比「\t」,表示回車,那麼它每行一個回車。
若是僅僅是字符串,就在每行輸出值的時候把這些字符串附加上去就OK。固然,最大長度也是10個字符
實例說明
注意:如下的輸出結果都是string類型的,爲了容易看就沒有用單引號‘’代表是字符串類型
只有一個參數
參數爲對象:
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 }
}
)
);
從例子中能夠看出:不可枚舉的屬性會被忽略
有兩個參數,第二個參數爲函數
函數例子: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}
就是把第一個值傳去函數進行相關的處理
有兩個參數,第二個參數爲數組
第一個參數爲數組
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()函數是用來序列化對象的,不管輸入什麼,輸出的都是字符串類型,能夠按本身的需求來定製如何序列化,輸出結果是怎樣的格式 ---------------------