автоинкрементный идентификатор в моем массиве JSON

Я пытался сделать это некоторое время сейчас, и я просто не могу понять это правильно. Один пост меня очень близко, но не совсем, потому что моя иерархия JSON. (это назначение, и эта иерархия обязательна.)

Что я делаю сейчас — это отправляю информацию с одной страницы, помещаю ее в мой php на другой странице, сохраняю там в массиве, json_encode для этого массива и записываю в мой файл JSON.

Вот мой разбавленный код, надеюсь избавиться от самого ненужного кода:

<?php

$filename = "json/exercises.json";
$filesize = filesize($filename);
$fp = fopen($filename, "r+");

#Accept the submitted form
$exLanguage = $_POST['exLanguage'];
$exTitle = $_POST['exTitle'];
$exStuff = $_POST['exStuff'];

#write to JSON with an incrementing ID
if (file_get_contents($filename) == "") {
$exercise = array (
"id" => 1,
"lang" => $exLanguage,
"title" => $exTitle,
"main_object" =>
[
"exStuff" => $exStuff
]
);
$exercise_json = json_encode($exercise, JSON_PRETTY_PRINT);
file_put_contents($filename, $exercise_json, FILE_APPEND);

} else {

#Get the last set ID
$jsonid = json_decode(fread($fp, $filesize), true);
$last = end($jsonid);
$title = prev($jsonid);
$lang = prev($jsonid);
$id = prev($jsonid);

$exercise = array (
"id" => ++$id,
"lang" => $exLanguage,
"title" => $exTitle,
"main_object" =>
[
"exStuff" => $exStuff
]
);
$exercise_json = json_encode($exercise, JSON_PRETTY_PRINT);
file_put_contents($filename, $exercise_json, FILE_APPEND);
}

?>

теперь, что это делает, если мой json пуст, он правильно добавляет первый массив с идентификатором 1. Затем, если я пытаюсь снова добавить его в json, он добавляет его правильно с идентификатором 2. Но любые дальнейшие попытки записи в JSON даст мне эти ошибки:

Предупреждение: end () ожидает, что параметр 1 будет массивом, задан ноль

Предупреждение: prev () ожидает, что параметр 1 будет массивом, задан ноль

Предупреждение: prev () ожидает, что параметр 1 будет массивом, задан ноль

Предупреждение: prev () ожидает, что параметр 1 будет массивом, задан ноль

Я пытался сделать

$reset = reset($jsonid);

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

Может кто-нибудь сказать, пожалуйста, как заставить это тоже работать? Или, если есть гораздо более простой способ сделать это?

0

Решение

Сначала поймите формат JSON. Это коллекция объектов, что означает attribute: value пара, завернутая в {} и через запятую , а затем снова завернутый в {} ИЛИ ЖЕ [] на высшем уровне.

Ваша структура JSON неполна или повреждена. То, что вы делаете в настоящее время, создаст JSON в следующем формате в вашем файле JSON:

{ "id": 1, "lang": "as", "title": "asdsad" }
{ "id": 2, "lang": "as", "title": "asdsad" }
{ "id": 3, "lang": "as", "title": "asdsad" }
{ "id": 4, "lang": "as", "title": "asdsad" }

Так json_decode вернусь null в этом случае из-за неверного формата JSON.

Вам нужно продолжать добавлять свой новый JSON в существующий JSON так, чтобы вышеуказанный формат стал таким:

[
{ "id": 1, "lang": "as", "title": "asdsad" },
{ "id": 2, "lang": "as", "title": "asdsad" },
{ "id": 3, "lang": "as", "title": "asdsad" },
{ "id": 4, "lang": "as", "title": "asdsad" }
]

Что означает ваш else блок неверный. Используйте следующий код в else блок:

$jsonid = json_decode(file_get_contents($filename), true);
$last = end($jsonid);
$id = $last['id'];

$jsonid[] = array (
"id" => ++$id,
"lang" => $exLanguage,
"title" => $exTitle,
"main_object" => array("exStuff" => $exStuff)
);
$exercise_json = json_encode($jsonid, JSON_PRETTY_PRINT);
file_put_contents($filename, $exercise_json, FILE_APPEND);

Я надеюсь, что вы не обязаны использовать этот неправильный / поврежденный формат JSON. Это не будет работать с json_decode() в любом случае.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector