Как отправить массив объектов в формате JSON из PHP

Новое на php. Я пытаюсь отправить данные JSON на передний конец в пару имя-значение. Я попробовал пример, который я получил здесь . Ниже приведен фрагмент кода, который отправляет данные в формате значения имени JSON.

while($stmt->fetch()){ $list = array('id' => $fid, 'name' => $fname); } $stmt->free_result(); $stmt->close(); echo json_encode($list); 

Я получил это на front-end

 Object {id: 12, name: "Manisha"} 

Проблема в том, что я ожидал массив объектов. Вышеприведенное значение является последним значением, полученным из SQL-запроса. Какие изменения я должен внести в этот код, чтобы я мог получить массив объектов. Что-то вроде

 [{"id":"1","name":"Kumari"}, {"id":"2","name":"KM"}, {"id":"3","name":"Manisha"}] 

Пожалуйста посоветуй.

$ list должен быть массивом, и вы можете просто нажимать на него элементы, как в этом коде:

 $list = array(); while($stmt->fetch()){ $list[] = array('id' => $fid, 'name' => $fname); } $stmt->free_result(); $stmt->close(); echo json_encode($list); в $list = array(); while($stmt->fetch()){ $list[] = array('id' => $fid, 'name' => $fname); } $stmt->free_result(); $stmt->close(); echo json_encode($list); 

Вы также можете использовать метод fetch_all (), чтобы сразу получить все строки, а не итерации с помощью цикла. Хотя в этом примере вы получили бы все поля, которые вы выбрали, вместо простого имени и имени.

 $list = $stmt->fetch_all(); $stmt->free_result(); $stmt->close(); echo json_encode($list); 

Вы должны попробовать нажать каждый объект в конце массива, как добавление в стек, используя array_push (эквивалент $array[] = $data , но делает его более читаемым для вас).

 $list=array(); //instantiate the array while($stmt->fetch()){ $data = new stdClass(); // create a new object $data->id=$fid; $data->name=$fname; array_push($list,$data); // push object to stack array } $stmt->free_result(); $stmt->close(); echo json_encode($list); в $list=array(); //instantiate the array while($stmt->fetch()){ $data = new stdClass(); // create a new object $data->id=$fid; $data->name=$fname; array_push($list,$data); // push object to stack array } $stmt->free_result(); $stmt->close(); echo json_encode($list); 

Ваш массив списка хранит только 1 строку. Попробуй это:

 while ($stmt->fetch()) { $list[] = array('id' => $fid, 'name' => $fname); } 

Надеюсь это поможет!

Посмотрите, работает ли это для вас:

 $n = 0; while($stmt->fetch()){ $list[$n] = array('id' => $fid, 'name' => $fname); $n++; } $stmt->free_result(); $stmt->close(); echo json_encode($list); в $n = 0; while($stmt->fetch()){ $list[$n] = array('id' => $fid, 'name' => $fname); $n++; } $stmt->free_result(); $stmt->close(); echo json_encode($list); 

Вы переписывали $list несколько раз с помощью массива.

попробуйте создать массив объектов

 $list = array(); while($stmt->fetch()) { // create an object $datum=new stdClass(); $datum->id=$fid; $datum->name=$fname; $list[] = $datum; } $stmt->free_result(); $stmt->close(); echo json_encode($list); 

Предположим, что у нас есть эта файловая структура без определенных объектов внутри:

  { "Subjects" : [] } //Get your Json file and decode it $json = file_get_contents('CdStore/Pagetest.json'); $json_data = json_decode($json,true); //Specifiy your Objects like this $NewArray= array( 'Mathematics' => array(),'Physics' => array()); //Push the new Objects array_push($json_data['Pagess'],$NewArray); //Then encode to json $array = json_encode($json_data); //If you want to get the preview before saving print_r($array); //Save your file file_put_contents('CdStore/Pagetest.json', json_encode($json_data)); 

В результате у вас есть:

  {"Subjects": [ { "Mathematics":[], "Physics":[] } ] }