如何使用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。你的工作是在对数据进行编码之前,首先让数据看起来正确。你的DB查询很可能会返回一组平面行,你必须循环遍历它,并以某种方式生成你想要的树。你可能会在这里找到其他关于如何从平面DB结果创建树结构的问题。
由于您使用的是Zend Framework,我建议您使用Zend_Json。Zend_Json是一个非常有用的组件,用于从格式化Json
,任何支持的格式(对象、数组、xml…)
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即可。