簡體   English   中英

將mysql查詢返回的數據轉換為json(基於樹)

[英]Converting data returned from mysql query to json(tree based)

這個問題也已經提過,但是我猜沒有人回答。

可以說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作為后端腳本語言。

你可能正在做類似的事情

SELECT name, id FROM ...

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

給定您想要的結構,

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

這不會為您提供確切的結構,但是會將所有id作為子數組放在tarun字段值作為鍵的數組下。

擴展@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 Encode方法非常困難或不可能。

我建議使用按名稱排序的查詢來進行查詢,然后在閱讀行時,只需簡單檢查一下$ 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等模板中很好地工作

暫無
暫無

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

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