序列化JSON

课后整理 2020-12-21

JSON.stringify()函数能够将JavaScript值转换为 JSON字符串。具体用法如下。

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

参数说明如下。

如果replacer为函数,则 JSON.stringify将调用该函数,并传入每个成员的键和值。 使用返回值而不是原始值。如果该参数函数返回undefined,则排除该成员。根对象的键是一个空字符串:""。

如果replacer是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当value参数也为数组时,将忽略replacer数组。

如果省略space,则将生成返回值文本,而没有任何额外空格。

如果space是一个数字,则返回值文本在每个级别缩进指定数目的空格。如果space大于10,则文本缩进10个空格。

如果space是一个非空字符串(如“\t”),则返回值文本在每个级别中缩进字符串中的字符。

如果space是长度大于10个字符的字符串,则使用前10个字符。

JSON.stringify()函数的返回值是一个JSON格式的字符串。

【示例1】下面示例演示了如何使用JSON.stringify将数组转换成JSON字符串,然后使用JSON.parse将该字符串重新转换成数组。

var  arr = ["a", "b", "c"]; 
var  str = JSON.stringify(arr); 
document.write(str);                    //  ["a","b","c"]
document.write  ("<br/>"); 
var  newArr = JSON.parse(str); 
while  (newArr.length > 0) { 
    document.write(newArr.pop() +  "<br/>"); 
}

【示例2】下面示例把对象nums转换为JSON字符串,然后传入replacer()函数过滤出即将被字符串化的对象中值为13的属性。

var  nums = {
    "first": 7,
    "second": 14,
    "third": 13
}
var  luckyNums = JSON.stringify(nums,replacer);
document.write(luckyNums);                      //{"first":7,"second":14}
function  replacer(key, value){
    if (value == 13) {
        return undefined;
    } else {
        return value;
    }
} 

【示例3】下面示例是在上面示例基础上,设置space参数值为4,格式化JSON字符串,设置水平缩进为4个空格数。

var  nums = {
    "first": 7,
    "second": 14,
    "third": 13
}
var  luckyNums = JSON.stringify(nums,replacer,4);
document.write("<pre>"  + luckyNums + "</pre>");
function  replacer(key, value){
    if (value == 13) {
        return undefined;
    } else {
        return value;
    }
}

【示例4】下面示例使用JSON.stringify将contact对象转换为JSON 文本,定义memberfilter数组以便只转换name、sex和tel成员,同时排序显示为name、sex和tel。

var  contact = {
    qq : "111111111",
       name : "张三",
       tel : "13555556666",
       sex : "men",
       url : "http://www.mysite.cn/"
}
var  memberfilter = ["name","sex","tel"];
var  jsonText = JSON.stringify(contact, memberfilter, "\t");
document.write("<pre>"  + jsonText + "</pre>");

【示例5】下面示例使用JSON.stringify将一个数组进行转换,调用replaceToUpper 函数将数组中的每个字符串转换为大写形式。

var  continents =  ["Europe","Asia","Australia","Antarctica","North  America","South America","Africa"];
var  jsonText = JSON.stringify(continents, replaceToUpper);
function  replaceToUpper(key, value) {
    return value.toString().toUpperCase();
}
document.write(jsonText);            //输出"EUROPE,ASIA,AUSTRALIA,ANTARCTICA,NORTH  AMERICA,SOUTH AMERICA,AFRICA"