[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос про json
Renden
Привет, генерим из базы с помощью цикла массив ..
while($row = mysql_fetch_assoc($query))
$array[$row['id']] = $row;
echo(json_encode($array));

Результат:
{"1":{"id":"1","status_name":"\u043e\u0442\u043f\u0443\u0441\u043a" ...}}
{"4":{"id":"4","status_name":"\u043e\u0442\u043f\u0443\u0441\u043a" ...}}

как сделать чтоб в начале небыло 1 и 4-рки, те чтоб было так:
{"id":"1","status_name":"\u043e\u0442\u043f\u0443\u0441\u043a" ...}
{"id":"4","status_name":"\u043e\u0442\u043f\u0443\u0441\u043a" ...}

доэтого с json не работал особо, но понял что мне возвращается как обьект (JSON_FORCE_OBJECT) , а как-бы этого избежать? если убрать из скобок $row['id'] тогда группировки не произойдет, будут лишние результаты..



Спустя 21 минута, 26 секунд (22.12.2011 - 17:56) kent666 написал(а):
А попробуй

while($row = mysql_fetch_assoc($query))
$array. = $row;
echo(json_encode($array));

Может прокатит)

Хотя по сути
{"1":{"id":"1","status_name":"\u043e\u0442\u043f\u0443\u0441\u043a" ...}}
{"4":{"id":"4","status_name":"\u043e\u0442\u043f\u0443\u0441\u043a" ...}}

Это и есть 2 объекта JS
А должен быть только один
{"1":{"id":"1","status_name":"\u043e\u0442\u043f\u0443\u0441\u043a" ...},
"4":{"id":"4","status_name":"\u043e\u0442\u043f\u0443\u0441\u043a" ...}}

Спустя 17 минут, 16 секунд (22.12.2011 - 18:13) Arni написал(а):
Не проверяя, но может как-то так выкрутиться. id по идее в таблицах первый всегда, должно сработать.

while($row = mysql_fetch_assoc($query))
$array[key($row)] = $row;
echo(json_encode($array));

Спустя 55 минут, 29 секунд (22.12.2011 - 19:08) sergeiss написал(а):
?
echo json_encode($row);


И потом "собрать в кучу" полученные результаты.

Спустя 13 минут, 17 секунд (22.12.2011 - 19:22) Arni написал(а):
Цитата (sergeiss @ 22.12.2011 - 16:08)
?
echo json_encode($row);


И потом "собрать в кучу" полученные результаты.

Я под столом :D . В самом деле, а че бы в цыкле просто echo не вставить? Или ставка на то что 1 вызов json_encode повысит сильно производительность?

Спустя 28 минут, 6 секунд (22.12.2011 - 19:50) Xes написал(а):
$sqlrow = mysql_fetch_array($sql);

<?php
$array = array();
$array[] = array('id'=>2, 'b'=>'eeeeeee');
$array[] = array('id'=>4, 'b'=>'rrrrrr');
echo(json_encode($array));

[
{"id":2,"b":"eeeeeee"},{"id":4,"b":"rrrrrr&q uot;}]
?>


Лень проверять на базе но вроди как $sqlrow это масиив и $array это массив.

Спустя 14 часов, 44 минуты, 1 секунда (23.12.2011 - 10:34) Michael написал(а):
Цитата (sergeiss @ 22.12.2011 - 18:08)
?
echo json_encode($row);

И потом "собрать в кучу" полученные результаты.

это не будет тогда json

Renden, вот того что ты хочешь как раз можно добиться
$array[] = $row;
, но ты пишешь
Цитата
тогда группировки не произойдет, будут лишние результаты

не понятно что у тебя за группировка. $row['id'] повторяется между строками? Может логику пересмотреть(запрос сгрупировать и т.д.)? А решить можно и так дополнительной проверкой - добавлять или нет.

Спустя 26 минут, 42 секунды (23.12.2011 - 11:01) Renden написал(а):
Michael
Цитата
не понятно что у тебя за группировка. $row['id'] повторяется между строками?

Да именно, сам массив генерю так:

while($row = mysql_fetch_assoc($query))
{
$data_array[] = array('from'=>'/Date('.strtotime($row['date_b']).'000)/', 'to'=>'/Date('.strtotime($row['date_e']).'000)/',"desc"=>$row['status_name']);
$json_array[$row['id']] = array('name'=>$row['lastname'],"desc"=>$row['desc'], 'values'=>$data_array);
}
echo(json_encode($json_array));


Я получаю такое почти что надо за исключением 5: и фигурных скобок за место квадратных
{"5":{"name":"\u0410\u0431\u0440\u0430\u043c\u043e\u0432\u0430",
"desc":"text",
"values":[
{"from":"\/Date(1321819200000)\/","to":"\/Date(1323028800000)\/","desc":"\u043e\u0442\u043f\u0443\u0441\u043a"},
{"from":"\/Date(1307908800000)\/","to":"\/Date(1309118400000)\/","desc":"\u043e\u0442\u043f\u0443\u0441\u043a"}
]
}}

А надо:

[{ "name": "Jan Kowalski",
"desc": "Programista",
"values": [
{"from": "/Date(1309471200000)/", "to": "/Date(1310421600000)/", "desc": "<b>Type</b>: Task<br/><b>name</b>: Task 1<br/><b>Description</b>: Task desc."},
{"from": "/Date(1310594400000)/", "to": "/Date(1311112800000)/", "desc": "<b>Type</b>: Task<br/><b>name</b>: Task 2<br/><b>Description</b>: Task desc.", "customClass": "ganttOrange"}
]
}]

А плагин понимает только в таком формате (..

Спустя 15 минут, 38 секунд (23.12.2011 - 11:16) killer8080 написал(а):
Renden
постой, но ведь в $data_array у тебя будет копится массив от предыдущих итераций цикла while, и в каждой следующей итерации будут присутствовать данные от предыдущей. blink.gif
И откуда возьмется "customClass":, если ты его туда не добавляешь?
Цитата (Renden @ 23.12.2011 - 10:01)
Я получаю такое почти что надо за исключением 5: и фигурных скобок за место квадратных

Естественно, в javascript-е нет ассоциативных массивов, только объекты, потому и фигурные скобки.

Спустя 16 минут, 28 секунд (23.12.2011 - 11:33) Renden написал(а):
killer8080
Цитата
постой, но ведь в $data_array у тебя будет копится массив от предыдущих итераций цикла while, и в каждой следующей итерации будут присутствовать данные от предыдущей.

Да именно так, мне надо туда тоже поставить $row['id'], но тогда и в значениях values будут присутвовать цифры типа "{ 5: {.." Я потому и вопрос задал что непойму как это побороть..
customClass - необязательное для плагина опция..
Ну и как быть то?

Спустя 14 минут, 25 секунд (23.12.2011 - 11:47) killer8080 написал(а):
Renden
так тебе нужно избавится от id? Так что ли?

$json_array = array();
while($row = mysql_fetch_assoc($query))
{
$data_array = array('from'=>'/Date('.strtotime($row['date_b']).'000)/', 'to'=>'/Date('.strtotime($row['date_e']).'000)/',"desc"=>$row['status_name']);
$json_array[] = array('name'=>$row['lastname'],"desc"=>$row['desc'], 'values'=>$data_array);
}
echo(json_encode($json_array));


Цитата (Renden @ 23.12.2011 - 10:33)
killer8080Цитата
постой, но ведь в $data_array у тебя будет копится массив от предыдущих итераций цикла while, и в каждой следующей итерации будут присутствовать данные от предыдущей.


Да именно так

а вот здесь не понял, зачем нужно чтоб в values попадали данные от других рядов?

Спустя 24 минуты, 30 секунд (23.12.2011 - 12:12) Renden написал(а):
killer8080
Цитата
так тебе нужно избавится от id? Так что ли?

Да но при этом надо сгрупировать чтоб повторяющиеся значения были $data_array, т.е правильный код такой:

while($row = mysql_fetch_assoc($query))
{
$data_array[$row['id']][] = array('from'=>'/Date('.strtotime($row['date_b']).'000)/', 'to'=>'/Date('.strtotime($row['date_e']).'000)/',"desc"=>$row['status_name']);
$json_array[$row['id']] = array('name'=>$row['lastname'],"desc"=>'text', 'values'=>$data_array);
}
echo(json_encode($json_array));

Но еще раз повторяю что он не того формата он получается такой:

{"1":
{"name":"\u0413\u0440\u044f\u0437\u043d\u043e\u0432",
"desc":"text",
"values":{"1":[
{"from":"\/Date(1318190400000)\/","to":"\/Date(1318795200000)\/","desc":"\u043e\u0442\u043f\u0443\u0441\u043a"},{"from":"\/Date(1309550400000)\/","to":"\/Date(1309636800000)\/","desc":"\u043a\u043e\u043c\u0430\u043d\u0434\u0438\u0440\u043e\u0432\u043a\u0430"},
{"from":"\/Date(1318190400000)\/","to":"\/Date(1318795200000)\/","desc":"\u043e\u0442\u043f\u0443\u0441\u043a"},{"from":"\/Date(1309550400000)\/","to":"\/Date(1309636800000)\/","desc":"\u043a\u043e\u043c\u0430\u043d\u0434\u0438\u0440\u043e\u0432\u043a\u0430"},
}]
}
}

А как надо я выше показал, вопрос как и изначально стоит в том как можно избавиться от {"1": ?

Спустя 1 минута, 7 секунд (23.12.2011 - 12:13) Michael написал(а):
Цитата
А надо:
[
...
]

чтобы js массив получить, на php ты должен массив с нумерацией от нуля переводить json_encode.
Иначе - объект создастся. Перебирай объект for .. in -ом и не парься.

Спустя 9 минут, 55 секунд (23.12.2011 - 12:23) Renden написал(а):
Michael
Плагин писал не я, и он без коментов я хз где там что в javascript править, нельзя ли на стороне php после создания массива сбросить его ключи чтоб они были с нумерацией от нуля?

Спустя 4 минуты, 47 секунд (23.12.2011 - 12:27) killer8080 написал(а):
Renden
ключи у тебя получаются потому что ты их сам туда добавляешь.
$json_array[$row['id']] = array('name'=>$row['lastname'],"desc"=>'text', 'values'=>$data_array);

если делать так, то должен получится обычный индексный массив
$json_array[] = array('name'=>$row['lastname'],"desc"=>'text', 'values'=>$data_array);

Спустя 28 секунд (23.12.2011 - 12:28) Michael написал(а):

Спустя 7 минут, 35 секунд (23.12.2011 - 12:35) Renden написал(а):
Michael
Спс, почти получилось (надо было раньше про сброс ключей спросить, а то 2 страницы получилось :)), но теперь другой косяк в values две скобки заместо 1..
[{"name":"\u0413\u0440\u044f\u0437\u043d\u043e\u0432",
"desc":"text",
"values":[[
{"from":"\/Date(1318190400000)\/"..

Мб я что-то не так делаю?

Спустя 7 минут, 48 секунд (23.12.2011 - 12:43) Michael написал(а):
array_values и на внутренний массив что ли подействовало?...

Спустя 13 минут, 16 секунд (23.12.2011 - 12:56) Renden написал(а):
Michael
ну я на него пойдействовал smile.gif Там же тоже удалить надо было, ладно попробую сам разобраться спс..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.