2014-10-18 2 views
0

ИТАК Theres этот JSON объект:граф JSON объектов Javascript

jsontext = {"switches":[{"dpid":"00-00-00-00-00-01"},{"dpid":"00-00-00-00-00-02"},{"dpid":"00-00-00-00-00-03"},{"dpid":"00-00-00-00-00-04"},{"dpid":"00-00-00-00-00-05"},{"dpid":"00-00-00-00-00-06"},{"dpid":"00-00-00-00-00-07"}], 
"links":[["00-00-00-00-00-01","00-00-00-00-00-05"],["00-00-00-00-00-02","00-00-00-00-00-03"],["00-00-00-00-00-05","00-00-00-00-00-06"],["00-00-00-00-00-05","00-00-00-00-00-07"],["00-00-00-00-00-02","00-00-00-00-00-04"],["00-00-00-00-00-01","00-00-00-00-00-02"]]} 

Цель состоит в том, чтобы сосчитать все ДПИД объекты, которые существуют в нем ... так что я следующий до сих пор:

function objectLength(obj) { 
    var result = 0; 
    for(var prop in obj) { 
    if (obj.hasOwnProperty(prop)) { 
    // or Object.prototype.hasOwnProperty.call(obj, prop) 
     result++; 
    } 
    } 
    return result; 
} 

функция, которую я называю, чтобы получить сумму ДПИДА лет в коммутаторах

objectLength(jsontext.switches); 

вопрос в том, когда есть только один DPID для переключателя эс, как это:

jsontext = {"switches":[{"dpid":"00-00-00-00-00-01"}],"links":[]} 

он рассчитывает 0 ... это ничего в не делать для раздела ... по какой-то причине взять на себя пустой я думаю ..?

TL; DR, почему, когда только 1 DPID переключателей существует, объект JSON возвращает 0 ..

Ура!

+0

То, что вы говорите, не повторяется. У вас есть трейлинг-кавычка в вашем назначении 'jsontext', поэтому попытка выполнить это приведет к синтаксической ошибке. Если вы удалите это, код вернет 1 так, как ожидалось: http://jsfiddle.net/uu1mtL0g/ Кроме того, здесь нет JSON, у вас есть объект Javascript. JSON - текстовый формат для представления объектов. – Guffa

ответ

-1

Вы можете просто выполнить фильтрацию и использовать свойство length.

var arr = jsontext.switches.filter(function(x){return x.hasOwnProperty('dpid'); }); 
console.log(arr.length); // number of objects 

DEMO

+0

Я получаю сообщение об ошибке: TypeError: jsontext.switches не является объектом - через Firefox при тестировании. – TheLipster

+0

вам нужно 'JSON.parse()' строка, чтобы преобразовать его в объект –

+0

@JaredSmith его не json, а просто объект. –

1

Поскольку switches свойство только кажется, содержит объекты с dpid свойствами, вы на самом деле не нужно делать ничего особенного, чтобы сосчитать их. Просто выполните это:

var count = jsontext.switches.length; 
+0

Это прекрасно работает и однострочный! –

Смежные вопросы