Как я могу увидеть, если большой объект JSON содержит значение? - PullRequest
20 голосов
/ 11 июня 2010

Я использую PHP для json кодирования массивного многомерного массива событий, поэтому я получаю что-то вроде этого:

var ents = {"7":{"event_id":"7","nn":"The Whisky Drifters","nn_url":"the-whisky-drifters",
  "venue":"The Grain Barge","date_num":"2010-06-11","date_txt":"Friday 11th June",
  "gig_club":"1","sd":"A New Acoustic String Band...","ven_id":"44",
  "art":0},"15":{"event_id":"15","nn":"Bass Kitchen","nn_url":"bass-kitchen",
  "venue":"Timbuk2","date_num":"2010-06-11","date_txt":"Friday 11th June",
  "gig_club":"2","sd":"Hexadecimal \/ DJ Derek \/ Id","ven_id":"21",
  "art":1},

первое измерение - это идентификатор, см.

var ents = {"7":{

Таким образом, можно получить идентификаторы без проверки вложенных объектов ...

Какой самый быстрый и эффективный способ проверить, содержит ли мой JSON идентификатор?

Ответы [ 4 ]

45 голосов
/ 11 июня 2010

Вы можете использовать метод hasOwnProperty:

if (ents.hasOwnProperty('7')) {
  //..
}

Этот метод проверяет, содержит ли объект указанное свойство независимо от его значения.

Работает быстрее, чем оператор in, поскольку не проверяет унаследованные свойства.

2 голосов
/ 11 июня 2010

да, это возможно, но вы должны перебрать полный объект json на стороне клиента.

var JSONobj = ents, yourid;
for(key in JSONobj)
{
   if(((typeof key) == 'number') && key==yourid )
         alert(key);
}

если вы используете jQuery, то вы можете использовать метод $ .each для извлечения ключей из jsonObject

   var JSONobj = ents, yourid;
        $.each(JSONobj, function(key, value){     
             if(((typeof key) == 'number') && key==yourid )
                 alert(key);
           //ids.push(key);
        });
2 голосов
/ 11 июня 2010

В дополнение к тому, что CMS сказал: если вам нужны все свойства, вы можете зациклить на свойствах с for ... in:

for (prop in ents) {
  alert(prop); // Shows "7", "15", etc.
  // Accessing the sub-object:
  alert(ents[prop].nn); // Shows the names of each event
}

Также это не «многомерный массив». Это объект (с большим количеством вложенных объектов).

0 голосов
/ 04 апреля 2013

Просто используйте myObject.has("keyName").Это то, что действительно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...