Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Определить размер(длину) объекта JSON
 
 автор: Парсер   (07.01.2015 в 21:07)   письмо автору
 
 

Определить размер(длину) объекта JSON

1. Если бы был массив
var numbers = [1,2,3,4,5];
alert("numbers.length = \n" + numbers.length)
// вернет 5

2. Пусть задан простой объект
var obb = {1:10, 2:20, 3:30, 4:40, 5:50};
alert("obb.length = \n" + obb.length)
// вернет undefinet

3. На самом деле есть вложеные объекты (примерно 1000 элементов), типа
var obb ={11: {1:10, 21:{ 2:20, 31:{ 3:30, 4:40, 5:50} } }, 12: {1:10, 22:{ 2:20, 32:{ 3:30, 4:40, 5:50} } } };

Надо выбирать(читать, получать) отдельные объекты

  Ответить  
 
 автор: confirm   (07.01.2015 в 22:18)   письмо автору
 
   для: Парсер   (07.01.2015 в 21:07)
 

JSON, это не объект, это лишь способ описания данных в неком формате, и является обычной строкой.
А посчитать элементов в объекте можно только пройдясь по нему в цикле, ибо есть немного методов, но их нет к примеру в IE8, то есть не все во всех браузерах будет работать.

  Ответить  
 
 автор: Парсер   (07.01.2015 в 23:35)   письмо автору
 
   для: confirm   (07.01.2015 в 22:18)
 

Не пойму где ошибка. Вроде очень просто, но не понимаю чего-то простого
Надо выбирать свойства-значения (строки или объекта, как угодно) 11, 21, 31, 12, 22, 32

 
 var obb ={11: {1:10, 21:{ 2:20, 31:{ 3:30, 4:40, 5:50}  }  }, 12: {1:10, 22:{ 2:20, 32:{ 3:30, 4:40, 5:50} } } };

parse_obb (obb)
function parse_obb (ob) { 
   for (var key in ob) {
         alert(key+ "   "+ob[key])
      if (ob[key] instanceof Object){  
            alert(key + " instanceof  "+ob[key])
            parse_obb (ob);
      }   
   }
}

  Ответить  
 
 автор: confirm   (08.01.2015 в 01:48)   письмо автору
 
   для: Парсер   (07.01.2015 в 23:35)
 

У вас вложение то какое, а вы один уровень проверили, а остальные автоматом получатся что-ли?

var o = {
    11:{
        1:100, 
        21:{ 
            2:200, 
            31:{ 
                3:300, 4:400, 5:500
            }  
        } 
    }, 
    12: {
        1:1000, 
        22:{ 
            2:2000, 
            32:{ 
                3:3000, 4:4000, 5:5000
            } 
        } 
    } 
}; 

  
for(a in o) { 
    if(typeof o[a] == 'object') {   
        n = o[a];
        for(b in n) {
            if(typeof n[b] == 'object') {   
                m = n[b];
                for(c in m) {
                   if(typeof m[c] == 'object') {
                      for(d in m[c]) alert(m[c][d]);
                   } else alert(m[c]);  
                }
            } else alert(n[b]);
        }  
    } else alert(o[a]); 
}

  Ответить  
 
 автор: Парсер   (08.01.2015 в 02:59)   письмо автору
 
   для: confirm   (08.01.2015 в 01:48)
 

Спасибо, но у меня их там больше 1000 умрешь прописывать

Надо рекурсивно так, как будто из папки перебираем файлы и вложенные папки
Причем получать только те котроые на одном уровне.
Может вы и правильный путь выбрали, подумаю

Главный вопрос, как отобрать вложенный с ключом допустим 9 или _210, БЕЗ ДРУГИХ ВЛОЖЕННЫХ
Для more1, получить 0: 2, more2:22, more3:33 без остальных данных.
Для more4, получить 0: 3, more5: 55, more6: 66, more7:77 без остальных данных.
Для more9, получить 0: 9, more4: 99без остальных данных.
(что-то я запарился, пример не подобрать)

Этот код работает, исправленное жирным выделил

 
var obj = { more1: { 0: 2, more2:22,  more3:33,  more4: { 0: 3, more5: 55, more6: 66, more7:77, more8:88, more9:{ 0: 9, more4: 99 } } } };
 parseOb(obj);
function parseOb (ob) {
  
    for(var key in ob) 
    {   
        alert("1 key ="+key+" ob  = "+ob+" ob[key]   = "+ob[key] )

        if (ob[key] instanceof Object)
        {
            parseOb(ob[key])
        }
    }
}

  Ответить  
 
 автор: confirm   (08.01.2015 в 03:40)   письмо автору
 
   для: Парсер   (08.01.2015 в 02:59)
 

Как понять без Других вложенных? Вы обычный массив с глубоким вложением обходили когда либо? Вам удавалось не зная что далее следует "перескочить" не понятно сколько и чего, и достичь нужного?

Не получится без перебора элементов, будь то массив или объект. Пишите рекурсивный обход, но проверять придется.

  Ответить  
 
 автор: Парсер   (08.01.2015 в 03:45)   письмо автору
 
   для: confirm   (08.01.2015 в 03:40)
 

.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования