原因
由于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 (中国标准时间)}
由于IE8默认使用JScript.5.7,不支持原生JSON,需通过JSON.stringify和JSON.parse进行JS对象与JSON字符串的转换。JSON.stringify用于对象字符串化,可指定转换属性及缩进。JSON.parse用于解析JSON文本,可配合reviver函数处理解析过程。在处理日期时,需注意字符串化和解析的格式转换。
1908

被折叠的 条评论
为什么被折叠?



