如何使用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"
}
]
答案 0 :(得分:2)
我建议您按原样使用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结果创建树结构的其他问题。
答案 1 :(得分:1)
由于您使用的是Zend Framework,我建议您使用Zend_Json。 Zend_Json是一个非常有用的组件,用于从任何支持的格式(object,array,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就能做到。