将从mysql查询返回的数据转换为json(基于树)

时间:2013-10-16 16:59:26

标签: javascript php mysql json

这个问题也早先被问过,但我猜没有人回答。

让我们说mysql查询返回如下结果

name    |  id
tarun   |   1
tarun   |   2
tarun   |   3 

现在如果我们做标准的json编码,我会得到如下的东西:

[{"name":"tarun","id":"1"},{"name":"tarun","id":"2"},{"name":"tarun","id":"3"}]

但我输出的内容如下

[{"name" : "tarun", "ids" : [{"id": "1"},{"id": "2"},{"id": "3"}]}]

请忽略我的语法错误(如果有的话),但我希望我的问题有道理。 我使用PHP作为我的后端脚本语言。

3 个答案:

答案 0 :(得分:1)

你可能正在做类似

的事情
SELECT name, id FROM ...

$data = array();
while ($row = mysql_fetch_assoc($result)) {
   $data[] = $row;
}

鉴于您想要的结构,您需要

   $data[$row['name']]['ids'][] = array('id' => $row['id']);

这不会为您提供确切的结构,但它会将所有ID作为子数组放在由tarun字段值键入的数组下面。

答案 1 :(得分:0)

扩展@Marc B的答案

// Getting per person id's list
$people = array();
while ($row = mysql_fetch_assoc($result)) {
    $people[$row['name']][] = array('id' => $row['id']);
}

// Encoding as JSON
$output = "[";

foreach ($people as $name => $ids) {
    $output .= '{"name" : "'.$name.'", ids: [';
    foreach ($ids as $key => $id) {
        $output .= '{"id" : "'.$id.'"},';
    }
    rtrim($output, ",");
    $output .= ']},';
}
rtrim($output, ",");
$output .= ']';

echo $output;

上述解决方案特定于问题。在我看来,这个问题的通用JSON编码方法非常困难或不可能。

答案 2 :(得分:0)

我建议按名称命令进行查询,然后当你读取行时,只需做一个简单的检查,看看$ row ['name']是否发生了变化,如果有的话,将你收集的id添加到php对象

$curName="";
$curIds=array();
$betterJ=array();
$result = mysql_query ("SELECT name,id FROM mytable WHERE 1 ORDER BY NAME);
while($row=mysql_fetch_array($result)
{
    if($curName=="")
        $curName=$row['name']

    if($row['name']!=$curName){
        $betterJ[]=array($name=>$curName,$ids=>$Ids)
        $curName=$row['name']
        $curIds=array()
    }
    $Ids[]=$row['id];
}
$betterJ[]=array($name=>$curName,$ids=>$Ids);
echo json_encode($betterJ);

这可能有一个错字或其他东西,因为我在这里写,但它应该生成json像

[ [name:"tarus1",ids:[1,2,3]], [name:"tarus2",ids:[4,5,6], ... ]  

你可以在html等模板中工作得很好。