问题:
我正在将一些SQL表转换为JSON格式,并且我有一些空值,这些值没有以我想要的格式显示。当我的表中有一个空值时,它在转换为JSON时会变成“”,但我希望它只是说空而不是双引号。
代码:
$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格式:(中间名后的不同部分为空)
[
{"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')为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);
再次感谢你们!
答案 0 :(得分:0)
如果您希望JSON打印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"]. '"}';
}
答案 1 :(得分:0)
由于数据库中的null会导致问题,为什么不存储“null”字符串,并且在创建JSON格式时,使用条件运算符来选择真正的null。这是一个示例,代码假设如下: / p>
$outp = "[";
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"].'"}';
}
$outp .="]";
答案 2 :(得分:0)
以下是一些虚拟数据的示例
$db_results = array(
array('fname'=>'john', 'lname'=>'doe', 'property'=>''),
array('fname'=>'john', 'lname'=>'doe', 'property'=>''),
array('fname'=>'john', 'lname'=>'doe', 'property'=>NULL)
);
$output='';
$rowStr = '';
foreach($db_results as $i=>$row) {
$rowStr="{";
$rowStr.= '"fname":'.((is_null($row['fname']) || empty($row['fname'])) ? 'null' : '"'.$row['fname'].'"');
$rowStr.= ',"lname":'.((is_null($row['lname']) || empty($row['lname'])) ? 'null' : '"'.$row['lname'].'"');
$rowStr.= ',"property":'.((is_null($row['property']) || empty($row['property'])) ? 'null' : '"'.$row['property'].'"');
$rowStr.='}'; //add a comma here when a condition is met
$output.= $rowStr;
}
echo '['.$output.']';