2015-02-12 145 views
0

我想創建一個嵌套節點的JSON響應。第一個節點的數據來自名爲「類別」的表,第二個節點的數據來自另一個名爲「」的表。每個「軌道」裏面的「軌道」表通過「category_id」與「類別」表連接。到目前爲止,我已經創造了這個反應,PHP - 編碼嵌套JSON數組

{ 
    "category": [ 
     { 
      "category_id": "1", 
      "category_name": "Editor's Choice ", 
      "cover_url": "http://www.example.com" 
     }, 
     { 
      "category_id": "2", 
      "category_name": "New Releases", 
      "cover_url": "http://www.example.com" 
     } 
    ], 
    "success": 1 
} 

現在我想另一子節點「track_list」的數據將來自「軌道」表中的「類別」數組中。最終的JSON可能會是這樣的,

{ 
    "category": [ 
     { 
      "category_id": "1", 
      "category_name": "Editor's Choice ", 
      "cover_url": "http://www.example.com", 
      "track_list": [ 
       { 
        "track_id": "", 
        "track_name": "" 
       }, 
       { 
        "track_id": "", 
        "track_name": "" 
       } 
      ] 
     }, 
     { 
      "category_id": "2", 
      "category_name": "New Releases", 
      "cover_url": "http://www.example.com", 
      "track_list": [ 
       { 
        "track_id": "", 
        "track_name": "" 
       }, 
       { 
        "track_id": "", 
        "track_name": "" 
       } 
      ] 
     } 
    ], 
    "success": 1 
} 

這裏不用我已經嘗試過的代碼,

// array for JSON response 
$response = array(); 

// include db connect class 
require_once __DIR__ . '/db_connect.php'; 

// connecting to db 
$db = new DB_CONNECT(); 

// get all category data name from table 
$result = mysql_query("SELECT *FROM category") or die(mysql_error()); 

// check for empty result 
if (mysql_num_rows($result) > 0) { 

    // looping through all results 
    // category node 
    $response["category"] = array(); 

    while ($row = mysql_fetch_array($result)) { 

     // temp category array 
     $category = array(); 
     $category["category_id"] = $row["category_id"]; 
     $category["category_name"] = $row["category_name"]; 
     $category["cover_url"] = $row["cover_url"]; 

     // push single category into final response array 
     array_push($response["category"], $category); 
    } 

    // success 
    $response["success"] = 1; 

    // echoing JSON response 
    echo json_encode($response, JSON_PRETTY_PRINT); 
} else { 

    // no category found 
    $response["success"] = 0; 
    $response["message"] = "No result found"; 

    // echo no users JSON 
    echo json_encode($response, JSON_PRETTY_PRINT); 
} 

我不知道該嵌套JSON主意,因爲我在PHP全新的。任何形式的幫助都會受到嚴厲的譴責。

回答

0

變化while環這樣

while ($row = mysql_fetch_array($result)) { 

    // temp category array 
    $category = array(); 
    $category["category_id"] = $row["category_id"]; 
    $category["category_name"] = $row["category_name"]; 
    $category["cover_url"] = $row["cover_url"]; 

    $category_id = $row["category_id"]; 

    $track_list = array(); // for track list information 

    //Get the tracks associated with category 
    $result_tracks = mysql_query("SELECT *FROM tracks WHERE category_id = $category_id") or die(mysql_error()); 

    while ($row_track = mysql_fetch_array($result_tracks)) { 

      $track_list_temp = array(); 
      $track_list_temp["track_id"] = $row_track["track_id"]; 
      $track_list_temp["track_name"] = $row_track["track_name"]; 

      array_push($track_list, $track_list_temp);    
    } 

    $category["track_list"] = $track_list; // track list in category array 

    // push single category into final response array 
    array_push($response["category"], $category); 
} 
+0

非常有幫助,並明確解釋。 – 2015-02-15 05:08:41

0

使用

$tracklist_array["track_id"] = "value"; 
$tracklist_array["track_name"] = "value"; 
array_push($response["banner"]["tracklist"], $tracklist_array); 
+1

你的答案(它應該去的,爲什麼這樣)多一點細節將有一定的幫助,瞭解您嘗試藿回答OP的問題。 – Tensibai 2015-02-12 14:20:48