Как создать ответ JSON с вложенными объектами в PHP?

Я хочу создать ответ json с вложенным объектом json и сгруппировать мои фактические результаты по id_hotel

введите описание изображения здесь

МОЙ АКТУАЛЬНЫЙ ОТВЕТ 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"}
]
}

МОЙ КОД 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);

Что я desider

    {
"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

Решение

Добавить опцию JSON_FORCE_OBJECT в функцию. Вы можете прочитать об этом в http://tr2.php.net/manual/en/json.constants.php .
json_encode ($ response, JSON_FORCE_OBJECT);

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);

Дайте мне знать, если это работает.

Примечание. Для режима использовалась только 1 переменная для целей тестирования, и не были сброшены переменные, которые я поместил в массив режимов, но этого должно быть достаточно, чтобы проверить, работает ли основная идея. Чувствую себя немного ленивым: P

0

По вопросам рекламы [email protected]