如何验证某个字符串是否为JSON?

时间:2011-05-12 14:29:17

标签: javascript json

我正在使用一个向我发送XML的应用程序,因此我可以处理其中的数据。但是现在应用程序不仅会发送XML,还会发送JSON,具体取决于其他变量。

有什么方法可以验证发送的内容是否是JSON?相当于typeofinstanceof的东西会告诉我字符串是JSON吗?

编辑:我在这个使用非常非常差的编程框架构建的应用程序中进行维护。现在我的“数据”是一个函数的返回,我无法在没有重构框架的好部分的情况下获得Content-Type - 这需要几个月的时间 - 而且我现在没有这个时间。

现在:

ajax.request('POST',function(data){
    xml = loadXML(data); // It's always a XML, so I simply load it.
    ...
    ..
})

我需要什么:

ajax.request('POST',function(data){
    if(valueCanBeJSON(data)){ // It's not always a XML. How can I do this verification?
        json = eval('('+data+')');
    }else{
        xml = loadXML(data);
        ...
        ..
    }
})

2 个答案:

答案 0 :(得分:1)

正如@Gumbo评论的那样,您可以查看Content-Type HTTP响应标头字段。或者,您可以尝试解析它 - though don't use eval()。使用JSON.parse()。如果你正在使用jQuery,$.parseJSON()$.ajax()(不指定data-type)也会有效。

ajax.request('POST', function(data) {
    var isJSON;
    try {
        data = JSON.parse(data);
        isJSON = true;
    }
    catch (e) {
        isJSON = false;
    }

    if (isJSON) {
        // data is already parsed, so just use it
    }
    else {
        // try treating it as XML
    }
})

答案 1 :(得分:0)

如果服务器工作正常,它应该包含一个Content-type标题,告诉您响应正文的格式。此外,如果它能够以两种不同的格式发送响应,那么它应该尝试遵守请求中的Accept标头,并发送客户端指定的格式。

我建议你看一下JQuery - 它有facilities to handle this sort of thing.