将MySQL数据库转换为Json

3
我有一个MySQL数据库,想要将其转换为JSON格式,并得到以下类似的结果。
["aaa","bbb","ccc"]

但是当我使用以下PHP代码时:

<?php
require_once("../con.php");

$list = mysqli_query($con,"SELECT * FROM user WHERE reff='admin'");
$r = array();
while($data = mysqli_fetch_array($list)) {
    $r[] = array($data['username']);
}
echo json_encode($r, JSON_PRETTY_PRINT);
?>

我的结果与期望的不同,以下是实际结果

[ [ "aaa" ], [ "bbb" ], [ "ccc" ] ]

有什么建议如何修复它吗?


3
请将这行代码 $r[] = array($data['username']); 替换为 $r[] = $data['username']; - Accountant م
3个回答

1
最好的方法是使用 $r[] = $data['username']; 而不是 $r[] = array($data['username']);,因为使用这个语句 $r[] = array($data['username']); 你试图将用户名作为一个数组而不是用户名字符串值每次推到你的$r上,这就是为什么它会在你的用户名值周围创建额外的括号[]
但是,如果您不想更改现有的代码,则可以使用此额外的代码行 $r = array_merge(...$r) 来获得预期的结果,这里的 ... 称为展开运算符。

0

你正在将一个数组分配给另一个数组。请查看附加的更改:

<?php
require_once("../con.php");

$list = mysqli_query($con,"SELECT * FROM user WHERE reff='admin'");
$r = [];
while($data = mysqli_fetch_array($list)) {
    $r[] = $data['username'];
}
echo json_encode($r, JSON_PRETTY_PRINT);
?>

0

1.

将 $r[] = array($data['username']); 替换为 $r[] = $data['username'];

2.

"SELECT username FROM user WHERE reff='admin'" // * -> username 
// in while
$r[] = $data[0];
or
$r[] = current($data);

3.SQL中的格式

SELECT CONCAT('[',GROUP_CONCAT('"',username,'"'),']') FROM user WHERE reff='admin'

参见。https://dba.stackexchange.com/questions/192208/mysql-return-json-from-a-standard-sql-query

  1. 如果你的 MySQL 版本是 v5.7.22+

在 SQL 中使用函数 JSON_ARRAY、JSON_OBJECT、JSON_QUOTE https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html


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