Javascript 解析JSON时出现问题
我在使用JSON格式的第三方web服务时遇到了一些问题。来自服务器的JSON响应类似于这样:Javascript 解析JSON时出现问题,javascript,json,Javascript,Json,我在使用JSON格式的第三方web服务时遇到了一些问题。来自服务器的JSON响应类似于这样: { "ID":10079, "DateTime":new Date(1288384200000), "TimeZoneID":"W. Europe Standard Time", "groupID":284, "groupOrderID":10 } 我使用JavaScript来解析JSON,不需要额外的lib //Parse JSON string to JS
{
"ID":10079,
"DateTime":new Date(1288384200000),
"TimeZoneID":"W. Europe Standard Time",
"groupID":284,
"groupOrderID":10
}
我使用JavaScript来解析JSON,不需要额外的lib
//Parse JSON string to JS Object
var messageAsJSObj = JSON.parse(fullResultJSON);
解析失败。JSON validatior告诉我,“新日期(1288384200000)”无效
有没有一个库可以帮助我解析JSON字符串?试试var obj=eval(“(“+fullResultJSON+”)”);你会得到像佩卡说的东西。不过,别忘了使用额外的“()”。实际上,json的属性和值都应该用引号括起来。解析失败,因为json对象中可以解析的都是null、字符串、数字、对象、数组和布尔值,因此无法解析新日期(1288384200000)
您还有另一个问题,last属性不应该有尾随逗号。您的示例不是有效的JSON,因为JSON是一种数据交换技术。您可以使用
eval
将示例转换为Javascript对象:
var almostJSON = "{
"ID":10079,
"DateTime":new Date(1288384200000),
"TimeZoneID":"W. Europe Standard Time",
"groupID":284,
"groupOrderID":10,
}";
然后eval
ing它:
var myObject = eval('(' + almostJSON + ')');
然后,myObject
应该包含您要查找的内容
请注意,JSON中不允许使用函数,因为这可能会损害安全性。就像其他人指出的那样,它是无效的JSON。一种解决方案是使用
eval()
而不是JSON.parse()
,但这会给您带来潜在的安全问题
更好的方法可能是搜索并替换这些有问题的问题,将数据转换为有效的JSON:
fullResultJSON = fullResultJSON.replace(/new Date\((\d+)\)/g, '$1');
您甚至可以更进一步,使用JSON.parse()
的第二个参数将这些字段“恢复”为JavaScript日期对象:
下面是一个示例:
newdate(1288384200000)
是一个JavaScript命令,可能是直接执行的。除了var=eval(数据)之外,想不出其他方法来实现这一点代码>这不是正确的JSON,你应该向第三方抱怨这一点。我觉得这有点不安全,只是为了评估来自远程对等的任何内容。@scheffield:没错。如果你期望从第三方得到有效的JSON,并得到类似的东西,你就有理由怀疑。jsonlint用最后一个逗号告诉JSON在形式上是无效的。@fcalderan:别介意,我的大脑有点崩溃。当然,JSON和JS对象文字不是一回事,后面的逗号实际上是无效的。然而,他可能已经(并且可能已经)将JSON结果切碎到相关部分,而没有删除最后一项中的逗号。
var messageAsJSObj = JSON.parse(fullResultJSON, function (key, value) {
if (key == "DateTime")
return new Date(value);
return value;
});