Как генерировать json-ответ, используя php
В модели:
public function groups($getGroupId) { $cols = array('group_id','name'); $sql = $this->select () ->from ( $this->_name, $cols ) ->where ( 'parent_id=?', $getGroupId ); $groupDetails = $this->fetchAll ( $sql ); //$childGroupName = $groupDetails['name']; return $groupDetails; }
groupDetails.php страница:
$dbGroup = new dbGroups(); $groupDetails = $dbGroup -> groups($getGroupId); $jsonResponse = json_encode($groupDetails); print_r($jsonResponse);
При печати данных я получаю ответ вроде этого
[{"group_id":"2","name":"ABCD"},{"group_id":"7","name":"XYZ"}]
Но я хочу, чтобы результат был таким, потому что я должен генерировать jstree, используя json
[ { "data" : { "icon" : <optional>, "title" : <node name> }, "attr" : { "rel" : <the type you defined in the js (maybe "group")>, "title" : <node title>, "id" : <the node's id / group id> }, "state" : "closed" } ]
Поскольку вы используете Zend Framework, я рекомендую вам использовать Zend_Json . Zend_Json – довольно полезный компонент для форматирования Json
из любого поддерживаемого формата (объект, массив, xml …).
Zend_Json::decode()
и Zend_Json::encode()
позволят вам кодировать и декодировать Json и prettyPrint()
чтобы сделать ваш вывод более красивым.
Edit: Как сказал Svish, ваши два примера не похожи друг на друга, поэтому трудно догадаться, что вы хотите поместить в свое дерево.
Вам нужно создать свой собственный массив , чтобы вы могли выглядеть так, как хотите.
Например, предположим, что вы хотите получить только одну строку из своей базы данных в своем дереве, тогда ваш массив будет примерно таким:
$v = array( array( "data" => array("icon" => "ICON", "title" => $row->name), "attr" => array("rel" => "REL", "title" => "TITLE", "id" => $row->group_id), "state" => "closed")); echo Zend_Json::encode($v);
Эти строки должны повторять что-то вроде ваших примеров.
Чтобы он работал с вашим fetchAll()
, это сделает простой foreach .
Я бы рекомендовал вам использовать вывод из json_encode как есть. Снижает пропускную способность. Единственная причина, по которой я вижу все пробелы, – это отладка, и для этого я предпочел бы использовать FireBug и / или JSONView в FireFox.
В любом случае, если вы действительно этого хотите, вы можете попробовать флаг JSON_PRETTY_PRINT
? Кажется, это было добавлено в 5.4.0, хотя, возможно, не версия, которую вы поддерживаете … Кажется, есть варианты, которые вы можете использовать для них в комментариях. Может быть, вы можете найти что-то полезное? http://www.php.net/manual/en/function.json-encode.php#102091
Вы говорите, что теперь вам нужно создать jstree, и это действительно не имеет никакого отношения к тому, что вы просите. Вы два примера данных не похожи ни на что. json_encode не делает ничего особенного или волшебства. Он просто берет данные и превращает их в JSON. Это ваша задача, чтобы эти данные выглядели правильно, прежде чем кодировать их. Ваш запрос БД, скорее всего, возвращает набор плоских строк, и вам придется пройти через него и каким-то образом генерировать дерево так, как вы этого хотите. Вероятно, вы можете найти другие вопросы о том, как создавать древовидные структуры из результатов плоских БД.