Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2012, 00:35
Аспирант
Отправить личное сообщение для Le-mark43 Посмотреть профиль Найти все сообщения от Le-mark43
 
Регистрация: 08.02.2012
Сообщений: 34

Сколько объектов/массивов содержит JSON
Привет бравым программистам!
чисто теоритический вопрос, не могу въехать...
Как узнать сколько объектов либо массивов пришло в строке JSON.
Зачем мне это надо:
допустим имеется БД вида:

№ Имя пол возраст
1 Саша муж 5
2 Олег муж 6
3 Женя жен 5

Этих строк более 2000
есть PHP, забирающий эти данные из базы (допустим забрал 10 записей)
помещает это в $result, -> далее конвертим в JSON (весь массив), отправлем клиенту

На клиенте JavaScript формирует таблицу примерно таким макаром (код старый, возможно не рабочий, не в этом суть)
function showList(nnn){
var table = window.document.createElement('table');
table.setAttribute ('id',list)
for (i=0; i<=nnn.length-1; i++){
j = i++;
var row = table.insertRow(-1);
var cell = row.insertCell(-1);
var cell1 = row.insertCell(0);
cell.innerHTML = "<font size='3' color='blue' >" + nnn[i]+ "</font>" ;
cell1.innerHTML = "<p align='right'><font size='5' color='#463C46' >" + nnn[j]+ "</font></p>" ;
}
document.body.appendChild(table);
}

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

может есть какая то функция, которая сразу может сказать сколько пар ключ-значение есть в пришедшем JSON? или только фигачить с помощью "each"?
ну а если я толчу воду в ступе и есть более клёвые решения - подскажите!
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2012, 14:09
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Вообще, с объектом, особенно если вы знаете его структуру, удобно работать через for(key in obj){}. Эта конструкция для того и нужна.

А чтобы узнать длину JSON-объекта (в строке), при условии, что она верно сформирована, навскидку можно так:
r = "{d:err, g:sff, a:dfsf}";
alert(r.split(":").length - 1)

Нужно учитывать, что, если будут вложенные объекты, двоеточия в значениях или ключах, считать будет неверно. Но, если структура и содержание объекта известны, то как вариант на скорую руку подойдёт.
А вообще, проще добавлять размер при формировании JSON. Например добавить в объект ключ length с соответсвующим значением.

Последний раз редактировалось GuardCat, 09.02.2012 в 14:13.
Ответить с цитированием
  #3 (permalink)  
Старый 09.02.2012, 14:25
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

А так будет ошибка
r = "{'d':'err', 'g':'sf:f', 'a':'dfsf'}";
alert(r.split(":").length - 1)
__________________
.
Ответить с цитированием
  #4 (permalink)  
Старый 09.02.2012, 17:05
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

Думаем логически.
Имеем базу следующего вида:
Сообщение от Le-mark43
№ Имя пол возраст
1 Саша муж 5
2 Олег муж 6
3 Женя жен 5

Каждая строка в базе представляет ссобой объект с определенными свойствами:
{"name": "Саша",
 "sex": 1, // 1 - мужчина, 0 - женщина
 "old": 5
}

Совокупность объектов с идентичными свойствами является не что иное как массив. Поэтому база в JSON-формате будет выглядеть вот так:
[{"name": "Саша",
 "sex": 1,
 "old": 5
},
{"name": "Олег",
 "sex": 1,
 "old": 6
},
{"name": "Женя",
 "sex": 0,
 "old": 5
}]

Ну и теперь несложно узнать сколько объектов содержится в базе:
data = [{"name": "Саша",
 "sex": 1,
 "old": 5
},
{"name": "Олег",
 "sex": 1,
 "old": 6
},
{"name": "Женя",
 "sex": 0,
 "old": 5
}];
alert('Количество объектов в базе: ' + data.length);
alert('Имя 2-го учасника: ' + data[1].name);
Ответить с цитированием
  #5 (permalink)  
Старый 10.02.2012, 09:33
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Skipp,
Сообщение от Skipp
А так будет ошибка
Сообщение от GuardCat
...двоеточия в значениях или ключах, считать будет неверно.
Сообщение от Magneto
Совокупность объектов с идентичными свойствами является не что иное как массив.
Вооот. Я тож о правильной сборке на сервере говорил, но до простой вещи --- массив объектов --- не додумался.
Ответить с цитированием
  #6 (permalink)  
Старый 10.02.2012, 10:08
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Можно конечно примерно так, но это тоже не выход! Лучше конечно с массивом.
Object.prototype.length = function(){var x=0;for(i in this) x++; return x-1};
		var obj = {
			'one': '1',
			'two': '2'
		}
		alert(obj.length());
		alert({'1': '1','2': '2',3:3}.length());

Правда теперь у объектов есть новое свойство length которе будет куда не надо влезать
__________________
.

Последний раз редактировалось Skipp, 10.02.2012 в 10:33.
Ответить с цитированием
  #7 (permalink)  
Старый 10.02.2012, 14:25
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Сообщение от Skipp
Правда теперь у объектов есть новое свойство length которе будет куда не надо влезать
Ага.
Monkey patching
Ответить с цитированием
  #8 (permalink)  
Старый 10.02.2012, 14:39
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Le-mark43
Сколько объектов/массивов содержит JSON
2347629762389726398762394786293456934819028303 Не?
Ответить с цитированием
  #9 (permalink)  
Старый 10.02.2012, 15:21
Аспирант
Отправить личное сообщение для Le-mark43 Посмотреть профиль Найти все сообщения от Le-mark43
 
Регистрация: 08.02.2012
Сообщений: 34

Чуваки, спасибо! не зря я вас БРАВЫМИ назвал!
Magneto, мне очередной раз напомнил давно известную истину: что первым в голову пришло, то и верно. цепочка по идее так и выстраивалась, пришедший JSON в цикл и поехали, а потом я задумался... нет чтоб проверить....
кстати, GuardCat, идея все же прикольная двоеточия считать, я когда на фигурные скобки глядел, мелькала мысль их посчитать. ЖЭСТЬ братцы, нужен отдых! Спасибо еще раз!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax и Json callback функция borabora Prototype & script.aculo.us 0 30.01.2012 15:01
json данные не грузятся в windows XP но грузятся в w7 rustamaha Элементы интерфейса 2 28.11.2011 12:35
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 23:12
передача JSON на сервер mikeles AJAX и COMET 0 04.03.2011 11:28
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10