API

JSON.stringify(value, ?replacer, ?space) - string 将JS对象字符串化。
JSON.parse(text, ?reviver) - object 将JSON文本解析为JS对象。
另外:eval(str)也可以一定程度地将JSON串解析为JS对象。格式:eval('(' + text + ')')
要将JSON串解析为JS对象,推荐使用JSON.parse(text, ?reviver),准确性及可定制化程度较高。

参数解析

  • JSON.stringify(value, ?replacer, ?space) - string
    value JS对象
    replacer 可为数组,可为方法。
    若为数组,如["name", "age"],则只对传入对象的对应属性进行字符串化(其他属性自动丢弃)。
    若为方法,function(key, value) {...},返回value前可以对value做处理,若置value=undefined,则该name/value对自动丢弃。
    space 控制JSON文本串的缩进字符。
    可为数值(n个空格)。可为字符串(用字符串缩进)。缩进不会超过10个字符。
  • JSON.parse(text, ?reviver) - object
    text 待解析的JSON文本串。
    reviver 方法function(key, value) {...},可对中间的解析过程做处理|拦截。

demo

// 定义对象object
obj = {"name": "JT", "age": 22, "now": new Date()};
{name: "JT", age: 22, now: Wed Mar 20 2019 15:16:58 GMT+0800 (中国标准时间)}

// 转换为字符串(Date对象会调用toJSON()|toISOString()转换为字符串)
text = JSON.stringify(obj, null, "\t");
"{
	"name": "JT",
	"age": 22,
	"now": "2019-03-20T07:16:58.951Z"
}"
// 或:对传给服务器端的日期字符串格式做处理。
function reviver(key, value) {
	// Date类型的对象已经变成string类型。
	pattern = /^\d{4}[-\/]\d{2}[-\/]\d{2}($|[ T](\d{2}:){2}\d{2}($|\.\d{3}Z?$))/;
  if (pattern.test(value)) {
    value = value.substr(0, 10); // 截取字符串前10个字符"yyyy-mm-dd"。
	}
  return value;
}
text = JSON.stringify(obj, reviver, "\t");
"{
	"name": "JT",
	"age": 22,
	"now": "2019-03-20"
}"

// 从服务器端拿回文本数据,解析为对象(日期信息的字符串需要转换成Date对象)。
result = JSON.parse(
  text,
  function(key, value) {
    // 如果value是字符串,且匹配日期格式(正则匹配),则将value替换为Date对象。
    pattern = /^\d{4}[-\/]\d{2}[-\/]\d{2}($|[ T](\d{2}:){2}\d{2}($|\.\d{3}Z?$))/;
    if (typeof value == "string" && pattern.test(value)) {
      return new Date(value);
    } else {
      return value; // 不做修改。
    }
  }
);
{name: "JT", age: 22, now: Wed Mar 20 2019 15:16:58 GMT+0800 (中国标准时间)}

  • 打印对象的成员属性和成员方法
    默认不会打印成员方法,所以要自定义replacer方法。
JSON.stringify(obj, function(key, value) {
    if (typeof value == "function") {
        return value.toString();
    }
    return value;
}, "\t");
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐