Как создать ответ JSON с помощью PHP - PullRequest
1 голос
/ 27 февраля 2012

Как сгенерировать ответ 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"
   }
]

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Я бы порекомендовал вам использовать вывод из 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.Это ваша задача - сначала правильно отобразить эти данные, прежде чем их кодировать.Ваш запрос к БД, скорее всего, вернет набор плоских строк, и вам придется пройтись по нему и каким-то образом сгенерировать дерево так, как вы этого хотите.Возможно, вы найдете здесь другие вопросы о том, как создавать древовидные структуры из плоских результатов БД.

1 голос
/ 27 февраля 2012

Поскольку вы используете Zend Framework, я рекомендую вам использовать Zend_Json . Zend_Json - довольно полезный компонент, используемый для форматирования Json из любого поддерживаемого формата (объект, массив, xml ...).

Zend_Json::decode() и Zend_Json::encode() позволят вам кодировать и декодировать Json, а prettyPrint() используется, чтобы сделать ваш вывод более красивым.


Edit: Как сказал Свиш, ваши два примера не похожи друг на друга, поэтому трудно угадать, что вы хотите поместить в свое дерево.

Вам нужно создать свой собственный массив , чтобы он выглядел так, как вы хотите.

Например, допустим, вы хотите, чтобы в вашей базе данных была только одна строка из вашей базы данных, тогда ваш массив будет выглядеть примерно так:

$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 сделает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...