1
  1. 在控制器上,我的代码如下:

    format.json {render :json=>{
      :entities => @entities,
      :entity_category_counters => @entity_category_counters
    }}
    
  2. 在浏览器端,我的代码如下:

    $.getJSON('/entities.json',function(data){
    //data.entities
    //data[0].entities
    //data['entities']
    });
    

    无论我使用哪种方式访问​​返回的 JSON 对象的数据,我都无法成功。

  3. 返回的 JSON 如下:

    {"entities":[{"entity":{"created_at":"2011-08-01T18:14:32Z","description":"xxx"}},{"entity":{"created_at":"2011 -08-01T18:16:02Z","description":"xxx"}}],"entity_category_counters":[{"entity_category_counter":{"comment_category_id":1,"counter":4,"entity_id":1, "id":1,"important_tag":false}},{"entity_category_counter":{"comment_category_id":2,"counter":0,"entity_id":1,"id":2,"important_tag":false} },{"entity_category_counter":{"comment_category_id":3,"counter":0,"entity_id":1,"id":3,"important_tag":false}},{"entity_category_counter":{"comment_category_id":1,"counter":3,"entity_id":2,"id":4,"important_tag":false}},{"entity_category_counter":{"comment_category_id":2,"counter":0," entity_id":2,"id":5,"important_tag":false}},{"entity_category_counter":{"comment_category_id":3,"counter":1,"entity_id":2,"id":6,"重要标签“:假}}]}entity_id":2,"id":6,"important_tag":false}}]}entity_id":2,"id":6,"important_tag":false}}]}

  4. 如果我直接使用 Alert 显示数据,如下所示:

    $.getJSON('/entities.json',function(data){
    //data.entities
    //data[0].entities
    //data['entities']
    alert(data);
    
    });
    

消息框中的结果如下:

    [object Object],[object Object]

那么谁能告诉我如何解析和访问包含两个对象的返回 JSON 对象中的数据?提前致谢!

4

1 回答 1

3

JSON 代表 JavaScript Object Notation,因此您现在使用的是纯 JavaScript。你可以这样做:

data.entities[0].entity.created_at // 2011-08-01T18:14:32Z

我认为您的困惑在于实体是一个数组,因此您必须访问该数组的索引才能获取其中的实体。然后你也有实体类别。

我想你会发现几件事有帮助:

  • JSONLint ( http://jsonlint.com/ ) 粘贴到您的 json 代码中并对其进行格式化,以便您可以查看对象是可以直接访问还是在数组中,在这种情况下,您必须对其进行迭代或访问特定索引
  • 您的浏览器控制台。在谷歌浏览器中,您可以右键单击页面,选择“检查元素”,然后单击控制台选项卡。从那里您可以在您所在页面的上下文中执行 javascript。我将您的 json 输出粘贴到控制台中以使用它:test = {"entities...
于 2012-10-26T04:56:13.370 回答