Php 从json文件中删除
我有一个json文件,看起来像这样Php 从json文件中删除,php,laravel,Php,Laravel,我有一个json文件,看起来像这样 { "product_1": { "category_1": "Category 1", "category_2": "Category 2" }, } 我试图做的是,当我删除一个类别时,我想从json文件中删除“key”:“value” 这是我的密码 pu
{
"product_1": {
"category_1": "Category 1",
"category_2": "Category 2"
},
}
我试图做的是,当我删除一个类别时,我想从json文件中删除“key”:“value”
这是我的密码
public function deleteCategory($product, $category)
{
$storage = storage_path("/products.json");
$file = file_get_contents($storage);
$json = json_decode($file);
unset($json->$product->$category);
file_put_contents($storage, json_encode($json, JSON_PRETTY_PRINT));
return (array)$json;
}
当我删除一个类别时,它不会从json中删除它
我觉得奇怪的是,如果我这样做dd(文件内容($storage,json\u encode($json,json\u PRETTY\u PRINT))
,那么它就可以工作了
但是如果我只有文件内容($storage,json\u encode($json,json\u PRETTY\u PRINT))
那么它就不起作用了。所以我不知道在哪里
我错了。考虑到$product和$category是键,请尝试以下操作:
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;
}
@TimLewis-
$product
和$category
是我从公共函数deleteCategory($product,$category)
传递给该函数的值,如果我执行$json->product->category
可以添加dd($product)
和dd($category)
的输出吗?此代码$json->$product->$category
在技术上有效,但仅当$category
和$product
不是对象时才有效。例如,$product='property';未设置($json->$product)代码>,这与取消设置($json->property)
相同。你可能需要做一些像unset($json->{$product->name}->{$category->name})
,等等@TimLewis-对于$product
我得到产品1
,对于$category
我得到类别1
,所以你实际上是在调用unset($json->product\u 1->category\u 1)
,这应该是有效的。。。必须进行一些本地测试,看看有什么问题。编辑:我无法在php artisan tinker
中本地重新创建此文件:。dd($json)
显示了什么?这没有任何意义。。。versionLabels
从哪里来?我试过了,但在我的开发工具中出现了这个错误无法将stdClass类型的对象用作数组