JSON многоуровневый объект

0

Я пытаюсь извлечь сумму частот из глубоко вложенного объекта 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 не выполняет итерацию на объектах.

  • 0
    Какой объект вы пытаетесь передать функции?
  • 0
    На объектах второго уровня нет частоты. Это намного глубже, чем это.
Показать ещё 2 комментария
Теги:

1 ответ

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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню