2010-11-20 13 views
6

que tiene un archivo JSON con contenidos como esto:valor de índice de matriz

{ 
    "aaa":{ 
     "status":"available", 
     "classkey":"dotnet" 
    }, 
    "bbb":{ 
     "ccc":{ 
      "com":"available", 
      "net":"available", 
      "info":"available", 
      "org":"available" 
      } 
    } 
} 

Ahora queremos obtener el valor de la matriz por el índice (por ejemplo, xxx[0] como esto no como xxx['aaa'].). ¿Cómo puedo hacer eso?

+1

Quizás si explicó por qué quiere hacerlo de esta manera, podríamos ayudarlo a encontrar una mejor solución. – Alex

Respuesta

13

No puede. El orden no está garantizado en json y en la mayoría de las demás estructuras de datos clave-valor. Además, no tienes una matriz, tienes un objeto. ¿Por qué utilizar pares de nombre-valor en absoluto si no va a utilizar los nombres para acceder a los valores? Ahí radica el poder de json y otras tiendas de datos clave-valor. Si necesita para acceder a los valores por índices enteros, simplemente use una matriz para almacenar sus datos.

+3

+1 Pero ... ¿JSON mismo explícitamente prohíbe ordenar (no lo garantiza, pero * se * conserva en el formato de cable, si uno fuera tonto al confiar en una generación tan determinista)? Me imagino que es la implementación que no lo garantiza ... de todos modos ... solo un paseo tonto. –

3

No tiene una matriz, tiene un objeto. Como tal, no puede esperar que las claves estén en el mismo orden en todos los sistemas. Iterar el objeto como se espera que los objetos se iteren, es decir, sobre las claves que se le dan.

1

Utilice el para ... en constructo, y luego use la sintaxis de matriz. Aquí hay un ejemplo.

for (var key in xxx) { 
    document.write(xxx[key]); 
} 
+0

'i' todavía se refiere al nombre de la clave, incluso si lo nombra' i'. :) – Alex

0

Quizás esto pueda resolver su problema.

Usando jQuery puede convertir su JSon en matriz y acceder a él por índice.

var data = $.parseJSON(msg.d ? msg.d : msg); 
alert(data[1].status) 
8

En realidad se puede utilizar int índice como una matriz en JSON, sólo tratar de que:

var jsonObject = { 
    "0":{ 
     "status":"available", 
     "classkey":"dotnet" 
    }, 
    "1":{ 
     "ccc":{ 
      "com":"available", 
      "net":"available", 
      "info":"available", 
      "org":"available" 
      } 
    } 
} 

alert(jsonObject[0].status) 
+0

Esto me ayudó un regalo, ¡gracias! – martinedwards

+0

@ Xdevelop ¿Podría proporcionar un script PHP con while loop para crear una matriz como esta? –

0

En aras de proporcionar una respuesta a la título de la pregunta, aquí está la estructura de matriz que serviría el propósito original:

[ 
    { 
     "status":"available", 
     "classkey":"dotnet" 
    }, 
    { 
     "ccc":{ 
      "com":"available", 
      "net":"available", 
      "info":"available", 
      "org":"available" 
      } 
    } 
] 

Así que simplemente reemplace los corchetes exteriores con [] para obtener una matriz en lugar de un objeto. Aquí hay un demo. Ver http://www.json.org/ y http://www.json.com/.

Cuestiones relacionadas