使用jQuery从JSON中获取对象

3

我正在尝试使用$.getJSON从我的服务器查询JSON文件,然后在对象内循环。目前没有问题,但是当我有一个ID时,它是我想要返回的对象的名称,但似乎无法正确获取:

  var id = 301;
  var url = "path/to/file.json";
  $.getJSON( url, function( json ) {
    var items = [];
    items = json;
    for (var i = 0; i < items.length; i++) {
      var item = items[i];
      console.log(item);
    }
  });

这会在控制台中打印以下内容: console.log of all the objects in json 现在假设我只想返回对象==id,这样我就可以通过item.banos,item.dorms等方式引用它。
我的第一个尝试类似于:
console.log(json.Object.key('301'));

这并没有起作用。

任何帮助都将不胜感激。


3
console.log(json['301'])); 可以翻译为:输出 json 对象中键为 '301' 的值。 - jcubic
@jcubic回答它,就这样 - Th0rndike
@KingRider请使用英语。 - jcubic
@jcubic 返回未定义 - user2770956
我知道,问题在于数字不支持该值。 - KingRider
1
可能是访问/处理(嵌套的)对象、数组或JSON的重复问题。 - Michał Perłakowski
3个回答

3

看起来你的响应被包含在一个只有一个元素的数组中。


你可以通过方括号动态访问对象属性:

var id = 301;
var url = "path/to/file.json";
$.getJSON(url, function(json) {
    console.log(json[0][id].banos);
});

这样做就可以了,能否解释一下为什么我必须要使用两次方括号? - user2770956
[0] 访问包装数组中的第一个(在这种情况下是唯一的)元素。[id] 访问从第一步中提取的对象的 id 属性。 - TimoStaudinger
我应该展开这个数组吗? - user2770956
@TimoSta问题是JSON是不同的对象。您的代码示例是正确的。 - KingRider
@KingRider 不确定你想表达什么? - TimoStaudinger
显示剩余3条评论

1

由于在要检索的对象中已经有属性名称,因此可以使用方括号表示法。由于这一点,您还可以简化代码:

var id = 301;

//$.getJSON("path/to/file.json", function(json) {
  // response data from AJAX request:
  var json = {
    '301': {
      banos: 2
    },
    '302': {
      banos: 3
    },
    '303': {
      banos: 4
    },
    '304': {
      banos: 5
    },
  };

  var item = json[id];
  console.log(item);
//});


谢谢您的帮助,但是这会返回未定义。而且我没有投反对票。 - user2770956
我添加了一个可工作的示例。如果这段代码无法工作,那么您需要在问题中添加实际的JSON而不是控制台表示的图像。 - Rory McCrossan
@KingRider 抱歉,我不知道你在说什么。 - Rory McCrossan
@KingRider 兄弟,有点难理解你的意思。 - user2770956
@KingRider 我不确定你是认真的还是开玩笑的。 - user2770956

0
$.each(items,function(n,value){
    if(n==301)
        alert(value);
});

1
请在回答中提供更多细节,因为此帖已被视为低质量帖。仅仅给出代码和“试试这个”类的答案是不鼓励的,因为它不提供任何可搜索的内容,也不能解释为什么人们应该去“试试”。 - Paritosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接