如何从PHP以JSON格式发送一个对象数组

12

刚接触php。我试图以键值对的方式将JSON数据发送到前端。我尝试了一个例子,是从这里获取的。以下是我的代码片段,它以JSON名称值格式发送数据。

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

我在前端得到了这个

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

问题在于我原本期望得到一个对象数组,而上述值是从 SQL 查询中获得的最后一个值。请问我应该对这段代码进行哪些修改,以便能够得到一个对象数组,例如:

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

请给予建议。


由于$list被定义为一个值数组,我认为你不会在前端得到一个对象,而是Array [id:12, name:"Manisha"]。 - Waygood
6个回答

23
$list 需要是一个数组,你可以像这段代码一样向其中添加元素:
$list = array();
while($stmt->fetch()){
    $list[] = array('id' => $fid, 'name' => $fname);
}
$stmt->free_result();
$stmt->close();
echo json_encode($list);

你也可以使用方法 fetch_all() 来一次性获取所有行,而不需要使用循环来迭代。尽管在这个例子中,你将获得选定的所有字段,而不仅仅是 id 和 name。

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

4
你应该尝试使用 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);

2

您的列表数组只存储了1行。请尝试以下操作:

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

希望这可以帮到你!

2
尝试创建一个对象数组。
$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);

0
假设我们有这样一个文件结构,里面没有特定的对象:
  {
    "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":[]

         }
     ]

  }

0

看看这个对你是否有效:

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

您多次使用数组覆盖了$list


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接