我有一个像这样的JSON字符串:(数据伪造,我的公司非常严格......)
{
"people" : {
"101" : {
"name" : "Strub, Thomas Reto",
"birthdate" : "/Date(690595200000)/"
}
},
"generated" : "/Date(1340755200000)/"
}
我在解析时使用了这个reviver:
var jsonMSDateTime = new RegExp('^\\/Date\\([0-9]{13}\\)\\/$');
function jsonReviver(key, value) {
if (jsonMSDateTime.test(value)) return new Date(value.substr(6, 13) * 1);
else return value;
}
我的问题如下:如果我在IE中运行此脚本,则会解析生成的日期,但生日期不会被解析。 (但它适用于chrome。)
我犯了什么错误?
答案 0 :(得分:2)
这绝对是IE中的一个错误(至少在IE9中)。考虑这个例子:
var js = {
"test" : "test",
"test2" : {
"a" : "1"
},
"1" : {
"b" : "2"
}
};
var json = JSON.stringify(js); /* <---- all fine here */
function jsonReviver(key, value) {
return value;
}
var jsonParsed = JSON.parse(json, jsonReviver);
jsonParsed["1"] /* <---- undefined */
问题是,如果您将密钥"1"
更改为非数字密钥(例如"a1"
),则可以正常工作。因此,解析器似乎不能很好地处理数字键(不知道为什么)。数值很好。
请注意,即使您使用JSON.parse(json);
,结果仍然不正确。我用jQuery $.parseJSON
对它进行了测试,结果不佳。
因此,您的问题至少有三种解决方案:
eval("("+json+")");
。毕竟JSON 是一个有效的JavaScript。我不建议,但这可能很危险。