我如何用jquery解析Json

时间:2010-10-27 17:41:07

标签: jquery ruby-on-rails json

我需要解析一个简单的json响应(来自我的rails应用程序):

[
    {
        "photo":
            {
                "updated_at":"2010-10-14T19:12:35Z",
                "photo_file_size":206422,
                "created_at":"2010-10-14T19:12:01Z"
            }
      },
      {
        "photo":
            {
                "updated_at":"2010-10-16T18:19:38Z",
                "photo_file_size":83593,
                "created_at":"2010-10-14T19:14:35Z"
            }
       }
]

我正在使用:

$(document).ready(function()
{
    $.ajax({
     type: "GET",
     url: "http://myurl...",    
     dataType: "jsonp",
     success: function(data){
        console.log(data);          
        //...
          });

     }
    });
});

firebug控制台输出表明响应正常!

如何使用函数(数据)解析所有照片块中的每个photo_file_size?

任何帮助都将受到高度赞赏: - )

4 个答案:

答案 0 :(得分:6)

jQuery会自动将数据解析为JSON,因为您设置了数据类型。在成功方法中,您可以使用基本Javascript对photo_file_size

执行某些操作
$(document).ready(function(){
  $.ajax({
    type: "GET",
    url: "http://myurl...",    
    dataType: "json",
    success: function(data){
      for( var i=0; i<data.length; i++ ){
        alert( data[i].photo.photo_file_size );
      }
    }
  });
});

但是,如果您使用的是JSONP,则需要完全不同。 JSONP有一个回调函数,将在<script>标记中提供(以避免相同的原始策略,请参阅Wiki)

<script>
    function callback( data ){
      for( var i=0; i<data.length; i++ ){
        alert( data[i].photo.photo_file_size );
      }
    }
</script>
<script src="yoururltojsonp.php?callback=callback"></script>

另外,请查看jQuery's solution

答案 1 :(得分:1)

jQuery的JSON解析器是$.parseJSON()。所以,在你的成功函数中:

var json = $.parseJSON(data);

或者,如果您没有使用json响应类型:

var json = $.parseJSON(data.responseText);

你应该好好去。

答案 2 :(得分:1)

这不是JSONP数据,这应该只是JSON。然后,您将可以访问数据,就像它是一个普通变量一样。在这种情况下,数据将是一个数组。

这假设服务器与请求JSON的服务器相同。

如果您需要JSONP数据,它应该类似于:

$callback$([
    {
        "photo":
        {
            "updated_at":"2010-10-14T19:12:35Z",
            "photo_file_size":206422,
            "created_at":"2010-10-14T19:12:01Z"
        }
    },
    {
        "photo":
        {
            "updated_at":"2010-10-16T18:19:38Z",
            "photo_file_size":83593,
            "created_at":"2010-10-14T19:14:35Z"
        }
    }
]);

$ callback $只是callback = GET变量中传递的简单打印。从本质上讲,JSONP实际上只是调用一个函数(回调)。它作为脚本标记放在DOM中,这就是它绕过跨域问题的原因。 (也许这是太多的信息:)。

答案 3 :(得分:1)

function(data) 
{
  for(var i=0; i<data.length; i++) 
    console.log(data[i].photo.photo_file_size);
}