IE8中的原生JSON对象如何使用以及解析?

由于IE8默认使用JScript.5.7,不支持原生JSON,需通过JSON.stringify和JSON.parse进行JS对象与JSON字符串的转换。JSON.stringify用于对象字符串化,可指定转换属性及缩进。JSON.parse用于解析JSON文本,可配合reviver函数处理解析过程。在处理日期时,需注意字符串化和解析的格式转换。

原因

由于JSON对象是在JScript. 5.8及其以后的版本引入的,所以,默认情况下,IE8使用的是JScript. 5.7版本,所以,原生JSON对象是无法使用的。

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 (中国标准时间)}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值