Изменить формат вывода JSON в файл?

У меня есть следующий код 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?

Итак, в основном вы пытаетесь переформатировать вывод json, верно?

Tanmoy Krishna Das 19.01.2019 10:33

Если это возможно, то да.

Pascal 19.01.2019 15:39

Вам нужны цитаты вокруг 17-01-2019 10:31:39 и 17.68 или нет?

Tanmoy Krishna Das 19.01.2019 17:24

Кроме того, вы хотите, чтобы каждый объект был заключен в [ 17.68, 17-01-2019 10:31:39 ] (как ваш вывод) или { 17.68, 17-01-2019 10:31:39 } (например, JSON)?

Tanmoy Krishna Das 19.01.2019 17:26

Я хочу, если это возможно, выходной файл, как последний макет, а не то, что у меня есть в данный момент.

Pascal 19.01.2019 18:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
109
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

json_encode($myArray,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);

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

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

$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>.

<pre>
echo json_encode($myArray,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);
</pre>

Я не вижу никакой разницы в показанных данных, только после лишнего пробела

Pascal 19.01.2019 15:38

Вы распечатывали его в браузере? Если вы печатаете его в браузере, вам нужно заключить вывод с тегом <pre>. Если вы находитесь в Windows, вам нужно изменить возврат каретки, см. Редактирование ответа

rxw 21.01.2019 20:59
Ответ принят как подходящий

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

<?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();

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

<?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 . "</pre>"; //if you want to see the output in a browser

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

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

Спасибо, Танмой, это выглядит намного лучше, но, как вы сказали, кавычки должны исчезнуть и по-прежнему { вместо [. Вот как теперь выглядит мой выходной файл.: [ { "KleurL": 17.68, "Datum": "17-01-2019 10:31:39" }, { "KleurL": 71.76, "Datum": "17- 01-2019 11:10:59" } ] имя KleurL и Datum также можно опустить, если это возможно.

Pascal 19.01.2019 20:44

Хорошо, я смотрю на это.

Tanmoy Krishna Das 19.01.2019 21:31

Нет, не совсем. Пока это выглядит так.: { "KleurL": 16.4, "Datum": "19-01-2019 16:30:59" } Но хотелось бы увидеть это.: [ 16.4, 19-01-2019 16: 30:59 ]

Pascal 19.01.2019 23:45

Я пробовал с помощью echo str_replace('{', '[', '', $output); но я не вижу никаких изменений.

Pascal 20.01.2019 00:07

Хорошо... Я посмотрю на это.

Tanmoy Krishna Das 20.01.2019 02:50

Я исправил код. Раньше я совершил глупую ошибку. Вместо доступа к свойствам объекта я обращался к элементам массива. Я протестировал текущий код на своем компьютере. Теперь он должен работать идеально.

Tanmoy Krishna Das 20.01.2019 14:37

Спасибо Танмой, теперь он выглядит так же, но теперь у меня две новые проблемы. Во-первых, у меня нет макета на моей странице, я не вижу никаких значений, а только в файле json, а во-вторых, в файле json [[17.68,17-01-2019 10:31:39],[71.76,17-01 -2019 11:10:59],[70.70,18-01-2019 08:40:41],[71.03,18-01-2019 10:30:01],[70.56,18-01-2019 12:05 :46],[16.20,18-01-2019 14:31:58],[16.60,19-01-2019 15:35:16],[16.40,19-01-2019 16:30:59],[ 16.84,19-01-2019 17:36:16]] и нехорошо под есть другое, так что у тебя было раньше.

Pascal 20.01.2019 15:14

Итак, вы имеете в виду, что вы хотите, чтобы выходная строка была красиво отформатирована, верно?

Tanmoy Krishna Das 20.01.2019 19:32

Я добавил еще один код ниже предыдущего кода для форматирования вывода с отступами и новыми строками. Посмотри.

Tanmoy Krishna Das 21.01.2019 21:56

Ой, Танмой, танк, ты такой мутч!!! это как раз то, что я хотел. Мне нужны эти данные в этом формате, чтобы использовать их в диаграмме. Моя следующая проблема заключается в том, что на диаграмме не отображаются данные, но я думаю, что мне нужно открыть новую тему для этой проблемы.

Pascal 22.01.2019 19:19

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

Tanmoy Krishna Das 23.01.2019 03:48

Другие вопросы по теме