У меня есть следующий код 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?
Если это возможно, то да.
Вам нужны цитаты вокруг 17-01-2019 10:31:39 и 17.68 или нет?
Кроме того, вы хотите, чтобы каждый объект был заключен в [ 17.68, 17-01-2019 10:31:39 ] (как ваш вывод) или { 17.68, 17-01-2019 10:31:39 } (например, JSON)?
Я хочу, если это возможно, выходной файл, как последний макет, а не то, что у меня есть в данный момент.






Вы можете использовать опции 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>
Я не вижу никакой разницы в показанных данных, только после лишнего пробела
Вы распечатывали его в браузере? Если вы печатаете его в браузере, вам нужно заключить вывод с тегом <pre>. Если вы находитесь в Windows, вам нужно изменить возврат каретки, см. Редактирование ответа
Следующий код должен достичь того, что вы пытаетесь сделать. Этот код был протестирован на моем компьютере и, кажется, работает отлично.
<?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 также можно опустить, если это возможно.
Хорошо, я смотрю на это.
Нет, не совсем. Пока это выглядит так.: { "KleurL": 16.4, "Datum": "19-01-2019 16:30:59" } Но хотелось бы увидеть это.: [ 16.4, 19-01-2019 16: 30:59 ]
Я пробовал с помощью echo str_replace('{', '[', '', $output); но я не вижу никаких изменений.
Хорошо... Я посмотрю на это.
Я исправил код. Раньше я совершил глупую ошибку. Вместо доступа к свойствам объекта я обращался к элементам массива. Я протестировал текущий код на своем компьютере. Теперь он должен работать идеально.
Спасибо Танмой, теперь он выглядит так же, но теперь у меня две новые проблемы. Во-первых, у меня нет макета на моей странице, я не вижу никаких значений, а только в файле 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]] и нехорошо под есть другое, так что у тебя было раньше.
Итак, вы имеете в виду, что вы хотите, чтобы выходная строка была красиво отформатирована, верно?
Я добавил еще один код ниже предыдущего кода для форматирования вывода с отступами и новыми строками. Посмотри.
Ой, Танмой, танк, ты такой мутч!!! это как раз то, что я хотел. Мне нужны эти данные в этом формате, чтобы использовать их в диаграмме. Моя следующая проблема заключается в том, что на диаграмме не отображаются данные, но я думаю, что мне нужно открыть новую тему для этой проблемы.
Если это решит вашу проблему, отметьте его как правильный ответ, чтобы в будущем другие люди, столкнувшиеся с той же проблемой, могли извлечь из этого пользу.
Итак, в основном вы пытаетесь переформатировать вывод json, верно?