这个问题也早先被问过,但我猜没有人回答。
让我们说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作为我的后端脚本语言。
答案 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等模板中工作得很好。