09.02.2012, 00:35
|
Аспирант
|
|
Регистрация: 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"?
ну а если я толчу воду в ступе и есть более клёвые решения - подскажите!
|
|
09.02.2012, 14:09
|
|
Просто любитель
|
|
Регистрация: 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.
|
|
09.02.2012, 14:25
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
А так будет ошибка
r = "{'d':'err', 'g':'sf:f', 'a':'dfsf'}";
alert(r.split(":").length - 1)
__________________
.
|
|
09.02.2012, 17:05
|
|
Люмус, Емаксос Developer!
|
|
Регистрация: 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);
|
|
10.02.2012, 09:33
|
|
Просто любитель
|
|
Регистрация: 13.09.2011
Сообщений: 300
|
|
Skipp,
Сообщение от Skipp
|
А так будет ошибка
|
Сообщение от GuardCat
|
...двоеточия в значениях или ключах, считать будет неверно.
|
Сообщение от Magneto
|
Совокупность объектов с идентичными свойствами является не что иное как массив.
|
Вооот. Я тож о правильной сборке на сервере говорил, но до простой вещи --- массив объектов --- не додумался.
|
|
10.02.2012, 10:08
|
|
.
|
|
Регистрация: 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.
|
|
10.02.2012, 14:25
|
|
Просто любитель
|
|
Регистрация: 13.09.2011
Сообщений: 300
|
|
Сообщение от Skipp
|
Правда теперь у объектов есть новое свойство length которе будет куда не надо влезать
|
Ага.
Monkey patching
|
|
10.02.2012, 14:39
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Le-mark43
|
Сколько объектов/массивов содержит JSON
|
2347629762389726398762394786293456934819028303 Не?
|
|
10.02.2012, 15:21
|
Аспирант
|
|
Регистрация: 08.02.2012
Сообщений: 34
|
|
Чуваки, спасибо! не зря я вас БРАВЫМИ назвал!
Magneto, мне очередной раз напомнил давно известную истину: что первым в голову пришло, то и верно. цепочка по идее так и выстраивалась, пришедший JSON в цикл и поехали, а потом я задумался... нет чтоб проверить....
кстати, GuardCat, идея все же прикольная двоеточия считать, я когда на фигурные скобки глядел, мелькала мысль их посчитать. ЖЭСТЬ братцы, нужен отдых! Спасибо еще раз!
|
|
|
|