我正在尝试获取Json的每个节点中的元素数量。 例如,在这种情况下:
{
"tickets": {
"use": "Valida",
"useagain": "Valida di nuovo",
"usetitle": "Convalida biglietto",
"price": "Prezzo"
},
"fares": {
"nofarestopurchase": "Non è possibile acquistare biglietti per la tratta indicata",
"purchasedcongratulations": "Congratulazioni",
"farepurchased": "Hai acquistato il tuo biglietto. Lo puoi trovare nella sezione",
"mytickets": "I miei biglietti",
"fareguestcard": "Hai ottenuto il tuo biglietto. Lo puoi trovare nella sezione"
},
"quantity": {
"title": "Seleziona il numero di persone:"
}
}
票证包含4种声音,包含4种票价和数量1。
如何以动态方式获取javascript中节点及其中元素的数量?
答案 0 :(得分:2)
试试这种方式
Object.keys( obj ).forEach( function(key){
console.log( "It has " + Object.keys(obj[key]).length + " " + key );
});
其中obj
是对象变量名。
答案 1 :(得分:1)
现代浏览器有一个可以帮助你的Objects.keys
,通常它会像这样使用:
Object.keys(jsonArray).length;
答案 2 :(得分:1)
您可以在对象上使用Object.keys()
来获取其键的数组;然后,使用数组的length
属性来查找数组中的键数。
因此,如果您的JSON结构是yourJSON
,则可以执行以下操作:
var ticketsNum = Object.keys(yourJSON.tickets).length; // 4
var faresNum = Object.keys(yourJSON.fares).length; // 4
var quantityNum = Object.keys(yourJSON.quantity).length; // 1
对于嵌套数据,就像你在这里一样,你可以轻松编写一个函数来计算每个“顶级”键的键/值对:
function countKeys (obj) {
var count = {};
Object.keys(obj).forEach(function (key) {
count[key] = Object.keys(obj[key]).length;
});
return count;
}
var nums = countKeys(yourJSON);
// nums = { tickets: 4, fares: 4, quantity: 1 }
答案 3 :(得分:0)
也许是这样的:
var ticket = {
"tickets":
{
"use": "Valida",
"useagain": "Valida di nuovo",
"usetitle": "Convalida biglietto",
"price": "Prezzo"
},
"fares":
{
"nofarestopurchase": "Non è possibile acquistare biglietti per la tratta indicata",
"purchasedcongratulations": "Congratulazioni",
"farepurchased": "Hai acquistato il tuo biglietto. Lo puoi trovare nella sezione",
"mytickets": "I miei biglietti",
"fareguestcard": "Hai ottenuto il tuo biglietto. Lo puoi trovare nella sezione"
},
"quantity":
{
"title": "Seleziona il numero di persone:"
}
}
var result = {};
for(prop in ticket) {
if(ticket.hasOwnProperty(prop)) {
result[prop] = { length: Object.keys(ticket[prop]).length };
}
}
console.log(JSON.stringify(result)); // {"tickets":{"length":4},"fares":{"length":5},"quantity":{"length":1}}
答案 4 :(得分:0)
你可以尝试递归。是的,这有点慢,但可以扩展。
出于演示目的,我更新了json以显示嵌套对象。
var data = {
"tickets": {
"use": "Valida",
"useagain": "Valida di nuovo",
"usetitle": "Convalida biglietto",
"price": "Prezzo"
},
"fares": {
"nofarestopurchase": "Non è possibile acquistare biglietti per la tratta indicata",
"purchasedcongratulations": "Congratulazioni",
"farepurchased": "Hai acquistato il tuo biglietto. Lo puoi trovare nella sezione",
"mytickets": "I miei biglietti",
"fareguestcard": "Hai ottenuto il tuo biglietto. Lo puoi trovare nella sezione"
},
"quantity": {
"title": "Seleziona il numero di persone:"
},
"test": [1, 2, 3, 4, 5],
"test2": {
"foo": {
"a": 1,
"b": 2
}
}
}
function getCount(obj, result) {
if (typeof(obj) === "object" || Array.isArray(obj)) {
Object.keys(obj).forEach(function(_key) {
return (function(key) {
if (typeof(obj[key]) === "object" || Array.isArray(obj[key])) {
result = result || {};
result[key] = {};
result[key].count = Object.keys(obj[key]).length;
Object.keys(obj[key]).forEach(function(k) {
getCount(obj[key], result[key]);
});
}
})(_key)
});
}
}
var r = {};
getCount(data, r);
console.log(r);