Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析JSON时出现问题_Javascript_Json - Fatal编程技术网

Javascript 解析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

我在使用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 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;
});