【问题标题】:PHP - encoding nested JSON arrayPHP - 编码嵌套的 JSON 数组
【发布时间】:2015-02-12 07:01:08
【问题描述】:

我正在尝试使用嵌套节点创建 JSON 响应。第一个节点的数据来自名为“category”的表,第二个节点的数据来自另一个名为“tracks”的表。 “tracks”表中的每个“track”都通过“category_id”与“category”表连接。到目前为止,我已经创建了这个响应,

{
    "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”,其数据将来自“category”数组中的“tracks”表。最终的 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 的新手。任何形式的帮助都将不胜感激。

【问题讨论】:

    标签: php json


    【解决方案1】:

    像这样改变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);
     }
    

    【讨论】:

      【解决方案2】:

      使用

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

      【讨论】:

      • 您的答案的更多细节(应该去哪里,为什么这样)将有助于理解您如何尝试回答 OP 的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2022-01-16
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多