php - 将 SQL 转换为 JSON 并保留空值?

标签 php mysql sql json

问题:

我正在将一些 SQL 表转换为 JSON 格式,但我有一些空值没有以我想要的格式显示。当我的表中有一个 null 值时,它在转换为 JSON 时变成 "",但我希望它只说 null 而不是双引号。

代码:

$conn = new mysqli($servername, $username, $password, $dbname);
$result = $conn->query("SELECT firstname, middlename, lastname FROM nametable");

$outp = "[";
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($outp != "[") {$outp .= ",";}
    $outp .= '{"firstname":"'  . $rs["firstname"] . '",';
    $outp .= '"middlename":"'   . $rs["middlename"]        . '",';
    $outp .= '"lastname":"'   . $rs["lastname"]        . '"}';
}
$outp .="]";
$conn->close();
echo($outp);

我得到的 JSON 格式:

[
   {"firstname":"John", "middlename": "Timothy", "lastname":"Doe"} ,
   {"firstname":"Mary", "middlename":"", "lastname":"Jane"}
]

我想要的JSON格式:(不同的部分是middlename后面的null)

[
   {"firstname":"John", "middlename":"Timothy", "lastname":"Doe"} ,
   {"firstname":"Mary", "middlename": null, "lastname":"Jane"}
]

编辑:我不想要这个:(因为 null 将被视为字符串)

[
   {"firstname":"John", "middlename":"Timothy", "lastname":"Doe"} ,
   {"firstname":"Mary", "middlename":"null", "lastname":"Jane"}
]

我尝试过的:

  • 我尝试将查询编辑为

    SELECT firstname, middlename, lastname
    FROM nametable
    WHERE (nametable->>'middlename') is null
    

    但它有问题,无法运行。

  • 我也试过

    SELECT firstname, middlename, lastname 
    FROM nametable 
    FOR JSON AUTO, INCLUDE_NULL_VALUES 
    

    但它也不会运行。

最终编辑:我考虑了每个人的建议,并在中间使用 if/else 语句使其工作:

$conn = new mysqli($servername, $username, $password, $dbname);
$result = $conn->query("SELECT firstname, middlename, lastname FROM nametable");

$outp = "[";
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($outp != "[") {$outp .= ",";}
    $outp .= '{"firstname":"'  . $rs["firstname"] . '",';
    if (is_null($rs['middlename']) == true)
       $outp .= '"middlename":null,';
    else
       $outp .= '"middlename":"'   . $rs["middlename"]        . '",';     
    $outp .= '"lastname":"'   . $rs["lastname"]        . '"}';
}
$outp .="]";
$conn->close();
echo($outp);

最佳答案

如果您希望 JSON 打印 NULL 而不是空白,请将您的 null 字段转换为字符串

while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($outp != "[") {$outp .= ",";}
    $outp .= '{"firstname":"'. $rs["firstname"] == null ?"null":$rs["firstname"]. '",';
    $outp .= '"middlename":"'. $rs["middlename"] == null ?"null":$rs["middlename"]. '",';
    $outp .= '"lastname":"'. $rs["lastname"] == null ?"null":$rs["lastname"]. '"}';
}

关于php - 将 SQL 转换为 JSON 并保留空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42353435/

相关文章:

php - 文字实时更新

mysql - Eloquent hasOne和一张大表,在查询中不做限制

mysql - 在 MySQL 中使用 CREATE TABLE 语句时,列属性必须按什么顺序输入?

sql - Oracle Sql Dev 中 COMPILE 和 COMPILE WITH DEBUG 之间的区别?

php - 返回值必须是 ?Illuminate\\Database\\Query\\Builder, App\\Models\\ModelName 返回的类型

php - 将值传递给 laravel 中的路由

php - 如何使用 php 重置表中行中的特定字段

mysql - 如何连接 Oracle 中的三个表,其中一个表的外键列中有空值?

php - 如何避免将表单发送的数据与自动增量唯一 ID 关联到 MySQL 数据库中可能发生的冲突?

php - 在加载文档时开始输入表格?