2014-11-06 4 views
0

나는PHP에서 중첩 된 객체로 응답 json을 만드는 방법은 무엇입니까?

enter image description here

MY 실제 JSON 응답

{ 
    "tag": "cities", 
    "success": 1, 
    "error": 0, 
    "items": 2, 
    "item": [ 
     { 
      "id": "6194", 
      "year": "2013", 
      "city": "London", 
      "start": "1", 
      "id_hotel": "20001", 
      "name": "hotel piccadilly", 
      "address": "road 4", 
      "number_fr": "7003", 
      "district": "london city", 
      "pr": "GB", 
      "fres": "1", 
      "mode": "Night", 
      "pos": "402", 
      "pes": "33", 
      "pis": "21", 
      "pus": "456" 
     }, 
     { 
      "id": "6194", 
      "year": "2013", 
      "city": "London", 
      "start": "1", 
      "id_hotel": "20001", 
      "name": "hotel piccadilly", 
      "address": "road 4", 
      "number_fr": "7003", 
      "district": "london city", 
      "pr": "GB", 
      "fres": "1", 
      "mode": "Day", 
      "pos": "0", 
      "pes": "1", 
      "pis": "0", 
      "pus": "1" 
     } 
    ] 
} 

인코딩 응답 MY PHP 코드

 $query = "SELECT * FROM cities WHERE city = 'London'"; 
    $result = mysql_query($query) or die(mysql_error()); 
    // check for empty result 
    if (mysql_num_rows($result) > 0) { 

     $response["item"] = array(); 

     while ($row = mysql_fetch_array($result)) { 
      // temp user array 
      $product = array(); 
      $product["id"] = $row["id"]; 
      $product["year"] = $row["year"]; 
      $product["city"] = $row["city"]; 
      $product["start"] = $row["start"]; 
      $product["id_hotel"] = $row["id_hotel"]; 
      $product["name"] = $row["name"]; 
      $product["address"] = $row["address"]; 
      $product["number_fr"] = $row["number_fr"]; 
      $product["district"] = $row["district"]; 
      $product["pr"] = $row["pr"]; 
      $product["fres"] = $row["fres"]; 
      $product["mode"] = $row["mode"]; 
      $product["pos"] = $row["pos"]; 
      $product["pes"] = $row["pes"]; 
      $product["pis"] = $row["pis"]; 
      $product["pus"] = $row["pus"];    

      // push single product into final response array 
      array_push($response["item"], $product); 
     } 
     // success 
     $response["items"] = mysql_num_rows($result); 
     $response["success"] = 1; 

     // echoing JSON response 
     echo json_encode($response); 
id_hotel하여 내 실제 결과 중첩 된 JSON 객체와 그룹과 JSON 응답을 생성합니다

내가 원하는 사람

{ 
"tag": "cities", 
"success": 1, 
"error": 0, 
"items": 2, 
"item": [ 
    { 
     "id": "6194", 
     "year": "2013", 
     "city": "London", 
     "start": "1", 
     "id_hotel": "20001", 
     "name": "hotel piccadilly", 
     "address": "road 4", 
     "number_fr": "7003", 
     "district": "london city", 
     "pr": "GB", 
     "fres": "1", 
     "mode": [{ 
     "value" : "Night", 
     "pos": "402", 
     "pes": "33", 
     "pis": "21", 
     "pus": "456" 
     }, 
     { "value" : "Day", 
     "pos": "0", 
     "pes": "1", 
     "pis": "0", 
     "pus": "1" 
     }] 

    } 
] 
} 

미리 감사드립니다.

+0

나는 내 질문을 해결했다. 중첩 된 쿼리를 만들었습니다. – Patrizio

+0

다른 사용자가 도움을 얻을 수 있도록 항상 답변을 게시해야합니다. –

답변

0

JSON_FORCE_OBJECT 옵션을 추가하십시오. 당신은 http://tr2.php.net/manual/en/json.constants.php에서 그것에 대해 읽을 수 있습니다. json_encode ($ response, JSON_FORCE_OBJECT);

+0

json_encode ($ response, JSON_FORCE_OBJECT)를 추가합니다. 아무것도 바꿀 수 없다. – Patrizio

0

첫째, 내가 당신에게 몇 줄을 저장하는 작은 변화를 제안하고, 따라서, 난 당신이

$query = "SELECT * FROM cities WHERE city = 'London'"; 
    $result = mysql_query($query) or die(mysql_error()); 
    // check for empty result 
    if (mysql_num_rows($result) > 0) { 

     $response["item"] = array(); 

     $current_id = NULL; 

     while ($row = mysql_fetch_array($result)) { 
      if ($row->id_hotel !== $current_id){ 
       $response["item"][] = $row; 
       $response["item"]["mode"] = array(); 
      } 
      $current_item = end($response["item"]); 
      $current_item["mode"][] = array("value"=>$row->value, "pes"=>$row->pes); 
      $current_id = $row->id_hotel; 
     } 
     // success 
     $response["items"] = mysql_num_rows($result); 
     $response["success"] = 1; 

     // echoing JSON response 
     echo json_encode($response); 

가 작동하는지 알려줘 원하는 것을 달성하기 위해 몇 가지 코드를 추가합니다.

참고 : 테스트 용으로 모드 용 변수 하나만 사용했고 모드 배열에 입력 한 변수를 설정하지 않았지만 기본 아이디어가 작동하는지 확인하기에 충분해야합니다. 조금 게으른 느낌 : P

관련 문제