2017-03-01 138 views
0

我想从返回的JSON字符串中获取键/值对;基于我的尝试,我做错了什么?正确解析JSON数据

$(document).ready(function(){ 
    var json_url = "http://hudsonspine.com/ldn/ldn.json"; 
    var json_str = $.getJSON(json_url); 
    var json_strfy = JSON.stringify(json_str); 
    var json_to_obj = $.parseJSON(json_str); 
    console.log(json_to_obj.animal); 
}); 

我得到以下错误(这我假设手段无法正确格式的数据,即使我的JSON源似乎OK):

"jQuery.Deferred exception: Unexpected token o in JSON at position 1" "SyntaxError: Unexpected token o in JSON at position 1 
    at Function.parse [as parseJSON] (<anonymous>) 
    at HTMLDocument.<anonymous> (pen.js:13:21) 
    at j (https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js:2:29948) 
    at k (https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js:2:30262)" undefined 
+2

'$ .getJSON(json_url);'是一个异步调用 - 所以你的下一行是在'getJSON'完成之前执行。 – tymeJV

+0

一旦你过去了整个异步问题,并找出如何$ .getJSON实际上工作 - 'json_str'实际上将是一个JavaScript对象 - 为什么你将它串起来 - 将它保存为json_strfy?并显然试图解析一个JavaScript对象,使用jquery的低级parseJSON,将失败 –

回答

2

$.getJSON不返回JSON结果。它是一个异步函数,结果传递给回调函数。它已经被解析(这是$.get$.getJSON之间的唯一区别),所以你并不需要使用的功能,如$.parseJSON

$.getJSON($json_url, function(result) { 
    console.log(result.animal); 
});