Недостающие символы массива

#json #forms

#json #формы

Вопрос:

Данные моей формы post в файл json не включают начальный и конечный теги []. И при отправке в существующий файл json для его добавления, данные добавляются после последнего ]. Кроме того, опубликованные данные не содержат требуемой запятой после последней фигурной скобки в записи.

Публикация в пустой файл json (без тегов [ ]) Добавление существующего файла json, содержащего теги [ ]

 <?php
if(isset($_POST['submit'])) {
    $file = "sites/default/files/storage.json";
    $json_string = json_encode($_POST, JSON_PRETTY_PRINT);
    file_put_contents($file, $json_string, FILE_APPEND);
    header('Location: thanks'); 
}
?>
  

Я ожидал, что JSON будет (для пустого файла):

[ { «имя»: «Джо», «электронная почта»: «joe@bloggs.com «, «ячейка»: «1234567890», «dob»: «1998-07-13», «исследование»: «4» } ]

но это показывает:

 {
   "name": "Joe",
   "email": "joe@bloggs.com",
   "cell": "1234567890",
   "dob": "1998-07-13",
   "study": "4"
}
  

Я ожидал, что JSON будет (для добавляемого файла):

 [
{
   "name": "Joe",
   "email": "joe@bloggs.com",
   "cell": "1234567890",
   "dob": "1998-07-13",
   "study": "4"
},
{
   "name": "tom",
   "email": "tom@bloggs.com",
   "cell": "1234567891",
   "dob": "1998-07-16",
   "study": "9"
}
]
  

но это показывает:

 [
{
   "name": "Joe",
   "email": "joe@bloggs.com",
   "cell": "1234567890",
   "dob": "1998-07-13",
   "study": "4"
}
]
{
   "name": "tom",
   "email": "tom@bloggs.com",
   "cell": "1234567891",
   "dob": "1998-07-16",
   "study": "9"
}
  

Комментарии:

1. Как выглядит ваш JSON?

2. Пожалуйста, уточните свой вопрос — вывод json показан выше. Вы спрашиваете о чем-то еще? Спасибо.

3. Извините, мне было интересно, что вы получаете по вашему PHP-запросу, прежде чем преобразовать его в JSON. Мне удалось попросить что-то еще, кроме того, что меня интересовало. Извините за это.

4. Нет проблем, Лайош, ну, я не знаю, если честно. Я просто вижу содержимое файла json и все.

5. Вы можете проверить запросы, отправленные на ваш сервер из вашего браузера. В инструментах разработчика вы можете перейти на вкладку сеть и проверить это.

Ответ №1:

Если бы вы должны были запустить

 $json_string = json_encode(array($_POST), JSON_PRETTY_PRINT);
  

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

 //Reading the file contents into a text
$yourJSON = file_get_contents('myfile.txt');
//Decode your JSON into a variable, assuming it will be an array
$yourArray = json_decode($yourJSON);
//Adding $_POST to the array
$yourArray[]=$_POST;
//Encode
json_encode($_POST, JSON_PRETTY_PRINT);
  

Комментарии:

1. Я попробую этот Лайос. Спасибо, очень признателен.

2. @user3642264 добро пожаловать. Пожалуйста, дайте мне знать результат.