#php #laravel
Вопрос:
У меня есть файл json, который выглядит так
{ "product_1": { "category_1": "Category 1", "category_2": "Category 2" }, }
Что я пытаюсь сделать, так это удалить категорию, которую я хочу удалить "key":"value"
из файла json.
Вот мой код
public function deleteCategory($product, $category) { $storage = storage_path("/products.json"); $file = file_get_contents($storage); $json = json_decode($file); unset($json-gt;$product-gt;$category); file_put_contents($storage, json_encode($json, JSON_PRETTY_PRINT)); return (array)$json; }
Что происходит, когда я удаляю категорию, это не удаляет ее из json.
И что мне показалось странным, так это то, что если бы я сделал это dd(file_put_contents($storage, json_encode($json, JSON_PRETTY_PRINT)))
, то это сработало бы, но если бы у меня было только file_put_contents($storage, json_encode($json, JSON_PRETTY_PRINT))
это, то это не сработало. Так что я не уверен, где я ошибаюсь.
Комментарии:
1. @TimLewis —
$product
и$category
-это значения, из которых я передал этой функции,public function deleteCategory($product, $category)
и они также не удаляются, если я это сделаю$json-gt;product-gt;category
2. Можете ли вы добавить вывод
dd($product)
иdd($category)
? Этот код$json-gt;$product-gt;$category
технически допустим, но только в том случае, если$category
и$product
не являются объектами. Например,$product = 'property'; unset($json-gt;$product);
, что было бы то же самое, чтоunset($json-gt;property)
. Возможно , вам придется сделать что-то вродеunset($json-gt;{$product-gt;name}-gt;{$category-gt;name})
и т. Д. и т. Д.3. @TimLewis — за
$product
то, что я получаюproduct_1
и за$category
то, что я получаюcategory_1
4. Таким образом , вы, по сути, звоните
unset($json-gt;product_1-gt;category_1)
, что должно быть обоснованным… Придется провести некоторое локальное тестирование, чтобы узнать, в чем дело. Изменить: Я не могу воссоздать это локально вphp artisan tinker
: i.stack.imgur.com/f0V7d.png . Что этоdd($json)
показывает?5. В этом нет никакого смысла… Откуда это
versionLabels
берется?
Ответ №1:
Попробуйте сделать это, учитывая, что $product и $категория являются ключевыми:
public function deleteCategory($product, $category) { $storage = storage_path("/products.json"); $file = file_get_contents($storage); $json = json_decode($file, true); unset($json[$product][$category]); file_put_contents($storage, json_encode($json, JSON_PRETTY_PRINT)); return (array)$json; }
Комментарии:
1. Я пытался это сделать, но получил эту ошибку в своих инструментах разработки
Cannot use object of type stdClass as array