簡體   English   中英

如何使用php生成json響應

[英]How to generate json response using php

如何使用php生成json響應

在模型中:

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"}]  

但我想要這樣的輸出,因為我必須使用json生成一個jstree

[
   {
      "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"
   }
]

我建議您按原樣使用json_encode的輸出。 占用較少的帶寬。 我看到所有空白的唯一原因是調試,為此我寧願在FireFox中使用FireBug和/或JSONView。

無論如何,如果您確實願意,您可以嘗試JSON_PRETTY_PRINT標志嗎? 似乎這是在5.4.0中添加的,所以也許您所使用的版本不支持它。。。似乎在其中的注釋中可以使用一些選項。 也許你能找到有用的東西? http://www.php.net/manual/en/function.json-encode.php#102091


您說您必須立即創建一個jstree,而這實際上與您的要求沒有任何關系。 您是兩個數據完全不同的例子。 json_encode沒有做任何特殊或魔術。 它只需要數據並將其轉換為JSON。 使數據正確編碼是您的工作。 您的數據庫查詢最有可能返回一組平面行,您將不得不循環遍歷它,並以某種方式按您希望的方式生成您的樹。 您可能會在這里找到有關如何根據平面數據庫結果創建樹結構的其他問題。

由於您使用的是Zend Framework,我建議您使用Zend_Json Zend_Json是一個非常有用的組件,用於從任何支持的格式 (對象,數組,xml ...)格式化Json

Zend_Json::decode()Zend_Json::encode()將允許您對Json進行編碼和解碼,而prettyPrint()用於使您的輸出更漂亮。


編輯:正如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將會這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM