Я пытаюсь извлечь сумму частот из глубоко вложенного объекта JSON.
{ "Baltimore":{
"health": {
"hospital": {
"data": {"frequency": 3, "relevance": 0.7845, "sentiment": "Mixed"},
"metadata": {
"article1": {"author": "Tom Jones", "title": "Current Rises in Health Insurance Policies in Baltimore", "timestamp": "26-FEB-1987 15:01:01.79"},
"article2": {"author": "Bob Jenkins", "title": "Obamacare in Hospitals", "timestamp": "06-SEP-2011 16:32:34.73"},
"article3": {"author": "Tom Jones", "title": "Rises in Hospital Fees", "timestamp": "31-DEC-1991 01:45:59.66"}
}
}
},
"crime": {
"assault": {
"data": {"frequency": 12, "relevance": 0.9045, "sentiment": "Negative"},
"metadata": {
"article1": {"author": "", "title": "Another shooting in Baltimore", "timestamp": "26-FEB-1987 15:01:01.79"},
"article2": {"author": "Anderson Silva", "title": "Street Crime up in cities", "timestamp": "06-SEP-2011 16:32:34.73"},
"article3": {"author": "John Jones", "title": "Rise in assaults in Baltimore", "timestamp": "31-DEC-1991 01:45:59.66"}
}
},
"robbery": {
"data": {"frequency": 15, "relevance": 0.553, "sentiment": "Positive"},
"metadata": {
"article1": {"author": "Rob", "title": "Robbery of Museum in Baltimore", "timestamp": "26-FEB-1987 15:01:01.79"},
"article2": {"author": "Anderson Silva", "title": "Man held at gunpoint for wallet", "timestamp": "06-SEP-2011 16:32:34.73"},
"article3": {"author": "John Jenkins", "title": "Increase in robbery frequency in MD", "timestamp": "31-DEC-1991 01:45:59.66"}
}
}
}
}
}
Я пытаюсь получить счетчик частоты для каждого объекта второго уровня (учитывая Балтимор как первый уровень). Поэтому в этом случае вывод должен быть Baltimore.health = 3 и Baltimore.crime = 27. Объекты третьего уровня не фиксируются в числе. Например, в области здравоохранения могут быть дополнительные объекты, такие как "Безопасность" или что-то в этом роде, каждый из которых имеет собственную частоту. Я пытаюсь сделать так:
function value(obj){
var i=0;
for (var x in obj){
if(obj.hasOwnProperty(x)){
i = i+x.frequency;
}
}
return i;
}
Но когда я передаю объект "Obj", x не выполняет итерацию на объектах.
Как указывал nnnnnn, x
- это имя свойства, поэтому вам нужно использовать синтаксис скобки для доступа к свойству. Объект в свойстве не имеет frequency
свойства, что внутри объекта в свойстве data
:
function value(obj) {
var i=0;
for (var x in obj) {
if (obj.hasOwnProperty(x)) {
i += obj[x].data.frequency;
}
}
return i;
}