如何在没有jQuery的情况下解析JSON

时间:2010-09-08 10:44:12

标签: javascript json

一些信息 - 我正在创建一个自动完成功能,它从json提要中获取数据。 JSON部分工作正常,结果有效。

当我获得它时,我正在使用json2.js并运行JSON.parse。当我尝试输出时,它告诉我它(包含解析的JSON文本的对象)实际上是未定义的。

如果我在对象上运行警报然后输出它有效。这可能很简单。但是这一点令人困惑,因为如果我提醒对象

它可以正常工作

我知道它不适用于所有事情,我只是想让它现在正常工作,我会改进它。

谢谢,如果有更多信息,我可以提供。

代码

//sURL takes a search term that's passed into the function

var JSON_object = {};
var oRequest = new XMLHttpRequest();
var sURL  = "datalinkhere"+input.value;

oRequest.open("GET",sURL,true);
oRequest.setRequestHeader("User-Agent",navigator.userAgent);
oRequest.onreadystatechange = function () {
    if (oRequest.readyState == 4 && oRequest.status == 200)
    {
        JSON_object = JSON.parse( oRequest.responseText );
    }
};
oRequest.send(null);

suggestion(JSON_object,input);

function suggestion(inp,targetid)
{
    document.getElementById('autosuggest').style.display='block';
    document.getElementById('autosuggest').innerHTML=inp[1].namefield;
}

4 个答案:

答案 0 :(得分:2)

问题不是警告json,而是代码的概念。 Ajax请求异步工作,因此在加载数据之前,oRequest.send调用不会阻塞,数据将在后台加载。

因此,当下一行(建议 - 调用)和您的代码正常工作或者您将获得未定义的var时,您可以获得运气并且数据可用。

你必须异步编写你的代码:在JSON.parse调用之后直接调用suggestion-call,所有这些都会像魅力一样工作。

答案 1 :(得分:2)

您可能对jQuery使用的函数感兴趣:

parseJSON: function( data ) {
    if ( typeof data !== "string" || !data ) {
        return null;
    }

    // Make sure leading/trailing whitespace is removed (IE can't handle it)
    data = jQuery.trim( data );

    // Make sure the incoming data is actual JSON
    // Logic borrowed from http://json.org/json2.js
    if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
        .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {

        // Try to use the native JSON parser first
        return window.JSON && window.JSON.parse ?
            window.JSON.parse( data ) :
            (new Function("return " + data))();

    } else {
        jQuery.error( "Invalid JSON: " + data );
    }
}

有几种jQuery方法,即修剪和错误,你可以通过阅读来源找出它们是什么:http://code.jquery.com/jquery-1.4.2.js

有趣的部分是这一点:

// Try to use the native JSON parser first
return window.JSON && window.JSON.parse ?
    window.JSON.parse( data ) :
    (new Function("return " + data))();

这是一种不使用eval读取JSON的简洁方法 - 设置一个返回数据的函数。

答案 2 :(得分:1)

尝试 JSON_object = eval(oRequest.responseText);

答案 3 :(得分:0)

最好的JavaScript是来自json2.js的JSON.parse函数,你可以从http://www.json.org/js.html下载。它是JSON.parseJSON.stringify最官方的版本。顺便说一下,实现将检查Web浏览器是否具有这些功能的内部实现,并在它们存在时使用它们。