Удаление из файла json

#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