Преобразование SQL в JSON и сохранение нулевых значений?

Проблема:

Я конвертирую некоторые таблицы 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"}
]

Редактировать: я не хочу этого: (потому что ноль будет рассматриваться как строка)

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

Что я пробовал:

  • Я попытался отредактировать мой запрос для SELECT имя, отчество, фамилия ОТ от имени ГДЕ (nametable — >> ‘middlename’) — ноль, но он глючит и не запускается.

  • Я также пробовал SELECT имя, отчество, фамилия 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);

Еще раз спасибо, ребята!

1

Решение

Преобразуйте пустое поле в строку, если хотите, чтобы 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"]. '"}';
}
0

Другие решения

Поскольку наличие нулевого значения в базе данных вызывает проблему, почему бы не хранить вместо него «нулевую» строку, а при создании формата JSON используйте условный оператор для выбора действительного нулевого значения. Это пример того, как ваш код выглядит следующим образом:

$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 .="]";
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.']';
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector