У меня есть две таблицы, которые я хочу преобразовать в json следующим образом:
[ { "date":"2013-07-20", "id":"123456", "year":"2013", "people":[ { "name":"First", "age":"60", "city":"1" }, { "name":"second", "age":"40", "city":"2" }, { "name":"third", "age":"36", "city":"1" } ] } ]
но результатом моего кода является следующее:
[ { "date":"2013-07-20", "id":"123456", "year":"2013",} ,{ "people":[ { "name":"First", "age":"60", "city":"1" }, { "name":"second", "age":"40", "city":"2" }, { "name":"third", "age":"36", "city":"1" } ] } ]
код создает новый объект для массива «people», и я хочу, чтобы они находились в одном и том же объекте
$result = mysql_query("SELECT * FROM data where id='123456'"); $fetch = mysql_query("SELECT name,age,city FROM people where id='123456'"); $json = array(); $json2['people'] = array(); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){ $json[] = $row; } while ($row = mysql_fetch_assoc($fetch)){ $row_temp["name"]=$row["name"]; $row_temp["age"] = $row["age"]; $row_temp["city"] = $row["city"]; array_push($json2['people'],$row_temp); } array_push($json, $json2); echo Json_encode($json);
Как я могу заставить массив находиться в том же объекте, что и таблица «данные»?
Большое спасибо
Я думаю, вы можете попробовать это
$result = mysql_query("SELECT * FROM data where id='123456'"); $fetch = mysql_query("SELECT name,age,city FROM people where id='123456'"); // I think, you'll get a single row, so no need to loop $json = mysql_fetch_array($result, MYSQL_ASSOC); $json2 = array(); while ($row = mysql_fetch_assoc($fetch)){ $json2[] = array( 'name' => $row["name"], 'age' => $row["age"], 'city' => $row["city"] ); } $json['people'] = $json2; echo json_encode($json);
Результат print_r($json)
должен быть примерно таким
Array ( [date] => 2013-07-20 [year] => 2013 [id] => 123456 [people] => Array ( [0] => Array ( [name] => First [age] => 60 [city] => 1 ) [1] => Array ( [name] => second [age] => 40 [city] => 2 ) ) )
Результат echo json_encode($json)
должен быть
{ "date" : "2013-07-20", "year":"2013", "id":"123456", "people": [ { "name" : "First", "age" : "60", "city" : "1" }, { "name" : "second", "age" : "40", "city" : "2" } ] }
Если вы выполните echo json_encode(array($json))
вы получите весь json
завернутый в массив, что-то вроде этого
[ { "date" : "2013-07-20", "year":"2013", "id":"123456", "people": [ { "name" : "First", "age" : "60", "city" : "1" }, { "name" : "second", "age" : "40", "city" : "2" } ] } ]
Вы были очень близки, но вы хотите, чтобы массив People был прямым значением внешнего массива, и вы завернули его в дополнительный массив.
Также обратите внимание, что библиотека MySQL, которую вы используете, устарела. Это означает, что он будет удален из PHP в будущей версии. Вы должны заменить вызовы из семейства MySQL_ * с помощью mysqli или pdo
$result = mysql_query("SELECT * FROM data where id='123456'"); $fetch = mysql_query("SELECT name,age,city FROM people where id='123456'"); $json = array(); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){ $json[] = $row; } $json['people'] = array(); while ($row = mysql_fetch_assoc($fetch)){ $row_temp["name"]=$row["name"]; $row_temp["age"] = $row["age"]; $row_temp["city"] = $row["city"]; array_push($json['people'],$row_temp); } echo Json_encode($json);
Вы можете заставить его работать, ожидая использования ключевых people
до самого конца, когда вы присоединяетесь к двум массивам. До тех пор просто загрузите данные в $json
и $json2
.
$json = array('date' => '2013', 'id' => '123456', 'year' => '2013'); $result = mysql_query("SELECT * FROM data where id='123456'"); $fetch = mysql_query("SELECT name,age,city FROM people where id='123456'"); $json = array(); $json2 = array(); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){ $json[] = $row; } while ($row = mysql_fetch_assoc($fetch)){ $row_temp["name"]=$row["name"]; $row_temp["age"] = $row["age"]; $row_temp["city"] = $row["city"]; array_push($json2, $row_temp); } $json['people'] = $json2; echo Json_encode($json);