Я пытаюсь создать json закодированный файл, используя php из опубликованных входов
$name =$_POST['n']; $age = $_POST['a']; $occ= $_POST['n']; $country = $_POST['n']; $jsoninfo = array('name'=>$name,'age'=>$age, 'occupation'=>$occ,'country'=>$country); $generated_json = json_encode($jsoninfo); echo $generated_json; file_put_contents('somefile', $generated_json, FILE_APPEND );
Когда я получаю 10 запросов на этот php-скрипт, файл создается как в следующем формате
{"name":"steve","age":"40","occupation":"ceo","country":"us"} {"name":"steve","age":"40","occupation":"ceo","country":"us"} {"name":"steve","age":"40","occupation":"ceo","country":"us"} {"name":"steve","age":"40","occupation":"ceo","country":"us"}
Q1. Когда я попытался проверить полученный выше json-текст в http://jsonlint.com/
я получаю сообщение об ошибке Expecting 'EOF', '}', ',', ']'
Q2. Как достичь нижеследующего формата
[ {"name":"steve","age":"40","occupation":"ceo","country":"us"}, {"name":"steve","age":"40","occupation":"ceo","country":"us"}, {"name":"steve","age":"40","occupation":"ceo","country":"us"}, {"name":"steve","age":"40","occupation":"ceo","country":"us"} ]
Конец , а также поле окончания ] необходимо добавить к каждой новой записи?
Вам нужно прочитать файл и декодировать его в массив, добавить к этому массиву, а затем записать весь массив.
$name =$_POST['n']; $age = $_POST['a']; $occ= $_POST['n']; $country = $_POST['n']; $old_contents = file_get_contents('somefile'); $jsoninfo = $old_contents ? json_decode($old_contents) : array(); $jsoninfo[] = array('name'=>$name,'age'=>$age, 'occupation'=>$occ,'country'=>$country); $generated_json = json_encode($jsoninfo); echo $generated_json; file_put_contents('somefile', $generated_json);
Пытаться:
$name =$_POST['n']; $age = $_POST['a']; $occ= $_POST['n']; $country = $_POST['n']; $jsoninfo = array( 'name' => $name, 'age' => $age, 'occupation' => $occ, 'country' => $country ); $file = file_get_contents('some_file'); $file = json_decode($file); $file[] = $jsoninfo; $data = json_encode($file, JSON_FORCE_OBJECT); file_put_contents('somefile', $data);