Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сколько объектов/массивов содержит JSON (https://javascript.ru/forum/misc/25553-skolko-obektov-massivov-soderzhit-json.html)

Le-mark43 09.02.2012 00:35

Сколько объектов/массивов содержит 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"?
ну а если я толчу воду в ступе и есть более клёвые решения - подскажите!

GuardCat 09.02.2012 14:09

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

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

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

Skipp 09.02.2012 14:25

А так будет ошибка:)
r = "{'d':'err', 'g':'sf:f', 'a':'dfsf'}";
alert(r.split(":").length - 1)

Magneto 09.02.2012 17:05

Думаем логически.
Имеем базу следующего вида:
Цитата:

Сообщение от 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);

GuardCat 10.02.2012 09:33

Skipp,
Цитата:

Сообщение от Skipp
А так будет ошибка

Цитата:

Сообщение от GuardCat
...двоеточия в значениях или ключах, считать будет неверно.

Цитата:

Сообщение от Magneto
Совокупность объектов с идентичными свойствами является не что иное как массив.

Вооот. Я тож о правильной сборке на сервере говорил, но до простой вещи --- массив объектов --- не додумался.

Skipp 10.02.2012 10:08

Можно конечно примерно так, но это тоже не выход! Лучше конечно с массивом.
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 которе будет куда не надо влезать:)

GuardCat 10.02.2012 14:25

Цитата:

Сообщение от Skipp
Правда теперь у объектов есть новое свойство length которе будет куда не надо влезать

Ага.
Monkey patching

devote 10.02.2012 14:39

Цитата:

Сообщение от Le-mark43
Сколько объектов/массивов содержит JSON

2347629762389726398762394786293456934819028303 Не? :D

Le-mark43 10.02.2012 15:21

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


Часовой пояс GMT +3, время: 15:58.