1

我看不到访问我的 json 对象中最深的值。这是一组图像,内容如下:

{
   "imgs":[
      {
         "Landscape":{
            "2":"DSCF2719.jpg",
            "3":"DSCF2775.jpg",
            "4":"IMG_1586.jpg",
            "5":"Red Rose.jpg",
            "6":"untitled030617.jpg",
            "7":"untitled071756.jpg",
            "8":"untitled170744.jpg",
            "9":"untitled170907.jpg",
            "10":"untitled235450.jpg"
         }
      },
      {
         "People":{
            "2":"IMG_0775.jpg",
            "3":"untitled011003.jpg",
            "4":"untitled011809.jpg",
            "5":"untitled024716.jpg",
            "6":"untitled114229.jpg",
            "7":"untitled120704-1.jpg",
            "8":"untitled120704.jpg",
            "9":"untitled203242.jpg",
            "10":"untitled222816.jpg",
            "11":"untitled231442-2.jpg"
         }
      },
      {
         "Still Life":{
            "2":"DSCF2769.jpg",
            "3":"untitled001620.jpg",
            "4":"untitled010832.jpg",
            "5":"untitled112413.jpg",
            "6":"untitled152613.jpg",
            "7":"untitled232940.jpg"
         }
      },
      {
         "Test":{
            "2":"DSCF2719.jpg",
            "3":"DSCF2769.jpg",
            "4":"DSCF2775.jpg",
            "5":"IMG_0775.jpg",
            "6":"IMG_1586.jpg",
            "7":"Red Rose.jpg",
            "8":"untitled001620.jpg",
            "9":"untitled010832.jpg",
            "10":"untitled011003.jpg",
            "11":"untitled011809.jpg",
            "12":"untitled024716.jpg",
            "13":"untitled030617.jpg",
            "14":"untitled071756.jpg",
            "15":"untitled112413.jpg",
            "16":"untitled114229.jpg",
            "17":"untitled120704.jpg",
            "18":"untitled152613.jpg",
            "19":"untitled170744.jpg",
            "20":"untitled203242.jpg",
            "21":"untitled222816.jpg",
            "22":"untitled231442-2.jpg",
            "23":"untitled232940.jpg",
            "24":"untitled235450.jpg"
         }
      }
   ],
   "cats":[
      "Landscape",
      "People",
      "Still Life",
      "Test"
   ]
}

除了最深的集合之外,我可以访问所有内容:

// accessed with $.ajax()
var obj = $.parseJSON(msg)
console.log(obj.cats[0]) // "Landscape"
console.log(obj.imgs[0][5]) // undefined
console.log(obj.imgs.length) // "3"

我也尝试过在最深层次不使用联想方面,只是"DSCF2719.jpg",代替"2":"DSCF2719.jpg",

我好像在网上找不到这个。我错过了什么?

4

2 回答 2

2

每个组都嵌套在类似 的类别下的对象中Landscape, People,但由于单个图像是数字属性,因此需要使用[]而不是更常见的 JavaScript 点属性表示法来访问它们。

// imgs is an Array, numerically indexed like [0]
// Landscape is an object in the first imgs element accessed via .Landscape
// 2 is a property of the Landscape object, but must be accessed with [2]
console.log(obj.imgs[0].Landscape[2]);
// "DSCF2719.jpg"

console.log(obj.imgs[0].People[6]); 
// "untitled114229.jpg"

外部对象的最后一个属性cats只是一个数组,通过数字索引访问:

console.log(obj.cats[0]);
// Landscape

编辑:要循环获取图像:

// Loops over imgs
for (var i=0; i<obj.imgs.length; i++) {
  var catName = obj.cats[i]; // Landscape, People, etc...
  // Use catName inside []
  // and a for-in loop to get the subsequent numeric properties
  for (var imgNum in obj.imgs[i][catName]) {
    console.log(obj.imgs[i][catName][imgNum]);
  }
}
于 2012-10-13T20:38:34.940 回答
0

obj.imgs[0] 是一个对象。它是唯一具有“景观”属性的。该属性的值是具有 9 个属性的对象。所以你应该尝试访问 obj.imgs[0][Landscape][5]。

但正如我所见,您的目标是将“cats”中的索引与“imgs”中的索引配对,在这种情况下,对于cats [0],您应该更具描述性地访问obj.imgs [cats [0]] [5]。

请注意,最里面的列表不是索引而是命名的。5 不是第六个元素的索引,而是第四个元素的名称,所以它产生了红玫瑰。由于该对象没有提供有关最内层数组中存在哪些键的直接信息,因此您可以使用 for(x in ...) 循环来查找所有元素。

于 2012-10-13T20:48:08.423 回答