Изменить формат вывода JSON в файл? - PullRequest
0 голосов
/ 19 января 2019

У меня есть следующий код PHP, который делает меня JSON-файлом с данными из моей таблицы SQL:

<?php
$mysqli = new mysqli('localhost','root','xxxx','xxxx');
$myArray = array();
$result = $mysqli->query("SELECT CONCAT(Datum , ' ', Tijd) as Datum, KleurL FROM metingen order by Datum ASC limit 20");
if ($result) {
  $tempArray = array();
  while ($row = $result->fetch_object()) {
    $tempArray = $row;
    array_push($myArray, $tempArray);
  }
  echo json_encode($myArray,JSON_NUMERIC_CHECK);
  $fp = fopen('resultsv2.json', 'w');
  fwrite($fp, json_encode($myArray,JSON_NUMERIC_CHECK));
  fclose($fp);
}
$result->close();
$mysqli->close();
?>

Выходной файл JSON выглядит следующим образом.

[{"Datum":"17-01-2019 10:31:39","KleurL":17.68},{"Datum":"17-01-2019 11:10:59","KleurL":71.76},{"Datum":"18-01-2019 08:40:41","KleurL":70.7},{"Datum":"18-01-2019 10:30:01","KleurL":71.03},{"Datum":"18-01-2019 12:05:46","KleurL":70.56},{"Datum":"18-01-2019 14:31:58","KleurL":16.2}]

Но я хотел бы видеть, что вывод этого файла выглядит следующим образом.

[
  [
    17.68,
    17-01-2019 10:31:39
  ],
  [
    18.11,
    17-01-2019 11:15:20
  ]
]

Как я могу получить этот вывод в файле JSON?

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Следующий код должен достичь того, что вы пытаетесь сделать. Этот код был протестирован на моем компьютере и, кажется, работает отлично.

<?php $mysqli = new mysqli('localhost', 'root', 'xxxx', 'xxxx');
if ($result = $mysqli->query("SELECT CONCAT(Datum , ' ', Tijd) as Datum, KleurL FROM metingen order by Datum ASC limit 20")) {
    $current_row_number = 0;

    $output = "[";
    while ($row = $result->fetch_object()) {
        if ($current_row_number > 0) {
            $output = $output . ","; //add comma between each row
        }

        $output = $output . "[" . $row->KleurL . "," . $row->Datum . "]"; //add each row

        $current_row_number++;
    }
    $output = $output . "]";

    echo $output;

    $fp = fopen('resultsv2.json', 'w');
    fwrite($fp, $output);
    fclose($fp);
}

$result->close();
$mysqli->close();

Если вы хотите правильно отформатировать вывод, используйте следующий код:

<code><?php $mysqli = new mysqli('localhost', 'root', '244466666', 'tkd');
if ($result = $mysqli->query("SELECT CONCAT(Datum , ' ', Tijd) as Datum, KleurL FROM metingen order by Datum ASC limit 20")) {
    $current_row_number = 0;

    $output = "[";
    while ($row = $result->fetch_object()) {
        if ($current_row_number > 0) {
            $output = $output . ","; //add comma between each row
        }

        $output = $output . "\n\t" . "[" . "\n\t\t" . $row->KleurL . "," . "\n\t\t" . $row->Datum . "\n\t" . "]"; //add each row

        $current_row_number++;
    }
    $output = $output . "\n]";

    // echo $output; //if you want to see the output in the terminal/command prompt
    echo "<pre>" . $output . "
"; // если вы хотите увидеть вывод в браузере $ fp = fopen ('resultsv2.json', 'w'); fwrite ($ fp, $ output); fclose ($ FP); } $ Result-> близко (); $ Mysqli-> близко ();
0 голосов
/ 19 января 2019

Вы можете использовать опции json_encode() JSON_PRETTY_PRINT:

json_encode($myArray,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);

редактирование:

если вы используете windows, вам нужно изменить возврат каретки, используя что-то вроде этого:

$myArray = array("test" => "data");

$buffer = json_encode($myArray,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);

echo str_replace("\n", "\r\n", $buffer);
// or
$fp = fopen('resultsv2.json', 'w');
fwrite($fp, str_replace("\n", "\r\n", $buffer));
fclose($fp);

Если вы печатаете это в браузере, вам нужно использовать <pre> теги

<code><pre>
echo json_encode($myArray,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...