zoukankan      html  css  js  c++  java
  • 浅谈 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 也可以使用非数字,如: 。

    返回值:

    返回包含 JSON 文本的字符串。

    实例

    var str = {"name":"菜鸟教程", "site":"http://www.runoob.com"}
    str_pretty1 = JSON.stringify(str)
    document.write( "只有一个参数情况:" );
    document.write( "<br>" );
    document.write("<pre>" + str_pretty1 + "</pre>" );
     
    document.write( "<br>" );
    str_pretty2 = JSON.stringify(str, null, 4) //使用四个空格缩进
    document.write( "使用参数情况:" );
    document.write( "<br>" );
    document.write("<pre>" + str_pretty2 + "</pre>" ); // pre 用于格式化输出
    

    但是 IE6-7 下没有 JSON 对象,所以要借助json2.js来实现。

    今天我们来简单介绍下stringify方法的一些正确使用姿势吧。
    当然,让高手们贱笑了,本文只是分享一些方法给新手朋友们。

    var data = [
        {name: "王尼玛", sex:1, age: 30},
        {name: "王尼美", sex:0, age: 20},
        {name: "王大锤", sex:1, age: 30}
    ];
    var str_json = JSON.stringify(data);
    console.log(str_json);
    

    这个是我们日常用法,非常简单,对吧。

    比如说,我们的数据非常复杂,还有类似头像,昵称,个人签名之类的信息。
    可是我保存在本地,只需要用户名,和性别,肿么破呢?
    也许你会说 so easy, 遍历数据重新提取下即可。
    例如:

    var data = [
        {name: "王尼玛", sex:1, age: 30},
        {name: "王尼美", sex:0, age: 20},
        {name: "王大锤", sex:1, age: 30}
    ];
    for (var i=0, new_data=[]; i<data.length; i++) {
        new_data.push({
            name: data[i].name,
            sex:  data[i].sex
        });
    }
    var str_json = JSON.stringify(new_data);
    console.log(str_json);
    

    确实分分钟搞定。

    其实我们只需要用stringify第二个参数即可简单处理这种问题。

    var data = [
        {name: "王尼玛", sex:1, age: 30},
        {name: "王尼美", sex:0, age: 20},
        {name: "王大锤", sex:1, age: 30}
    ];
    var str_json = JSON.stringify(data, ["name", "sex"]);
    console.log(str_json);
    

    第二个参数只要传入需要的keys数组,就非常轻松的就完成这种处理了。

    当然如果我们要更纠结的处理,比如要把 1,0 修改为男女,那么第二个参数可以用回调函数来处理。

    var data = [
        {name: "王尼玛", sex:1, age: 30},
        {name: "王尼美", sex:0, age: 20},
        {name: "王大锤", sex:1, age: 30}
    ];
    var str_json = JSON.stringify(data, function (k, v) {
        if (k === "sex") {
            return ["女", "男"][v];
        }
        return v;
    });
    console.log(str_json);
    

    第二个参数如此强悍,为我们省去了不少麻烦。

    还有第三个参数,用于格式化字符串用的。

    var data = [
        {name: "王尼玛", sex:1, age: 30},
        {name: "王尼美", sex:0, age: 20},
        {name: "王大锤", sex:1, age: 30}
    ];
    var str_json = JSON.stringify(data, null, "	");
    console.log(str_json);
    str_json = JSON.stringify(data, ["name", "sex"], "	");
    console.log(str_json);
    

    其实,我觉得这是个非常鸡肋的功能,,一般情况下却是没啥用。

    好了,今天的分享就这些了,希望对新手朋友有所帮助。

    参考资料:

    JSON.stringify() - JavaScript | MDN

    JSON in JavaScript

    文章来自:
    https://www.cnblogs.com/52cik/p/js-json-stringify.html#undefined
    https://www.runoob.com/js/javascript-json-stringify.html

  • 相关阅读:
    线段树合并
    bzoj 3675 [Apio2014]序列分割
    模版总结【长期更新】
    动态规划的题目总结(长期更新)
    搜索(另类状态BFS):NOIP 华容道
    贪心(模拟费用流):NOIP2011 观光公交
    基础算法(二分,贪心):NOIP 2012 疫情控制
    模拟(堆):USACO Jan11 瓶颈
    搜索(DLX重复覆盖模板):HDU 2295 Radar
    数学:lucas定理的总结
  • 原文地址:https://www.cnblogs.com/KillBugMe/p/12411286.html
Copyright © 2011-2022 走看看