Cómo obtener el valor clave en el objeto JSON y la longitud del objeto utilizando JavaScript.
Por ejemplo:
[
{
"amount": " 12185",
"job": "GAPA",
"month": "JANUARY",
"year": "2010"
},
{
"amount": "147421",
"job": "GAPA",
"month": "MAY",
"year": "2010"
},
{
"amount": "2347",
"job": "GAPA",
"month": "AUGUST",
"year": "2010"
}
]
Aquí, la longitud de esta matriz es de 3. Para obtener el valor está bien ([0].amount)
, en index[0]
tiene 3 nombre valor pair.
Por lo tanto, necesito para obtener el nombre (como la cantidad o el trabajo ... en total cuatro nombre) y también para contar cuántos nombres están ahí?
Json se representan básicamente como matriz asociada en Javascript. Sólo hay que hacer un bucle sobre ellos para leer la clave o el valor
var JsonObj= { "one":1, "two":2, "three":3, "four":4, "five":5 };
//read key
for (var key in JsonObj) {
console.log(key);
console.log(JsonObj[key]);
}
En primer lugar, you're no tratar con un "objeto JSON." You're tratar con un objeto JavaScript. JSON es una notación textual, pero si tu código de ejemplo funciona ([0].amount
), ya has deserializado esa notación en un gráfico de objetos JavaScript. (Lo que ha citado no es JSON válido en absoluto; en JSON, las claves deben ir entre comillas dobles. Lo que has citado es un literal de objeto JavaScript, que es un superconjunto de JSON).
Aquí, la longitud de este array es 2.
No, es 3.
Por lo tanto, necesito obtener el nombre (como la cantidad o el trabajo ... totalmente cuatro nombre) y también para contar cuántos nombres hay?
Si estás usando un entorno que tiene soporte completo para ECMAScript5, puedes usar Object.keys
(spec | MDN) para obtener las claves enumerables de uno de los objetos como un array. Si no es así (o si sólo quieres hacer un bucle a través de ellas en lugar de obtener un array de ellas), puedes usar for..in
:
var entry;
var name;
entry = array[0];
for (name in entry) {
// here, `name` will be "amount", "job", "month", then "year" (in no defined order)
}
Ejemplo completo:
begin snippet: js hide: false console: true babel: false -->
(function() {
var array = [
{
amount: 12185,
job: "GAPA",
month: "JANUARY",
year: "2010"
},
{
amount: 147421,
job: "GAPA",
month: "MAY",
year: "2010"
},
{
amount: 2347,
job: "GAPA",
month: "AUGUST",
year: "2010"
}
];
var entry;
var name;
var count;
entry = array[0];
display("Keys for entry 0:");
count = 0;
for (name in entry) {
display(name);
++count;
}
display("Total enumerable keys: " + count);
// === Basic utility functions
function display(msg) {
var p = document.createElement('p');
p.innerHTML = msg;
document.body.appendChild(p);
}
})();
Dado que estás tratando con objetos sin procesar, el bucle for..in
de arriba está bien (a menos que alguien haya cometido el pecado de meterse con Object.prototype
, pero supongamos que no). Pero si el objeto del que quieres las claves también puede heredar propiedades enumerables de su prototipo, puedes restringir el bucle sólo a las claves propias del objeto (y no a las claves de su prototipo) añadiendo una llamada hasOwnProperty
:
for (name in entry) {
if (entry.hasOwnProperty(name)) {
display(name);
++count;
}
}