2013-12-02 2 views
0

Я пытаюсь извлечь сумму частот из глубоко вложенного объекта JSON.JSON multilevel Object

{ "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», й не итерация на объектах.

+0

Какой объект это, что вы пытаетесь передать в функцию? – Guffa

+0

На объектах второго уровня нет частоты. Это гораздо глубже, чем это. – jfriend00

+2

Внутри цикла for вам нужно _obj [x] .frequency_ - x - это строка с именем свойства, это не значение свойства. (Хотя даже это не сработает, потому что _frequency_ вложен глубже.) – nnnnnn

ответ

0

Как указано 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; 
}