使用PHP和POST请求删除JSON数据

时间:2018-10-23 22:46:20

标签: php json

我想要一些PHP代码,使用PHP从JSON文件中删除内容,例如:

假设我有这个JSON文件:

{
     "aaa": [
         {
             "title": "xx",
             "description": "6",
         },
         {
             "title": "tt",
             "description": "b",
         }
     ]
}

因此,我希望它通过POST获取字符串,然后删除具有通过POST给出的字符串的JSON的整个部分。

例如,假设我通过POST请求发送“ xx”,PHP脚本运行后,我希望JSON看起来像这样,而没有被删除:

{
     "aaa": [
         {
             "title": "tt",
             "description": "b",
         }
     ]
}

我通过搜索互联网以各种方式进行尝试,但我无法做任何正确的事情。预先感谢!

我知道有很多类似的问题和答案,但对我来说它们都不适用,所以我问自己,不需要假装将其标记为重复的,如果您知道该怎么做,在这里回答,否则...

2 个答案:

答案 0 :(得分:0)

您想做的是...

  1. 使用file_get_contents()json_decode()将JSON文件解析为PHP数据结构
  2. 按标题过滤aaa数组,使用array_filter()删除与POST数据匹配的条目
  3. 使用json_encode()file_put_contents()将修改后的数据结构作为JSON字符串写回到文件中

这是一个例子

$file = 'path/to/file.json';
$data = json_decode(file_get_contents($file));
$title = trim($_POST['title']); // assuming this is all checked / validated / etc
$data->aaa = array_values(array_filter($data->aaa, function($item) use ($title) {
    return (bool) strcmp($item->title, $title); // returns 0 if strings match
}));
file_put_contents($file, json_encode($data));

演示〜https://3v4l.org/60MoG

答案 1 :(得分:0)

我知道您有一个可以接受的答案,但是使用这样一个简单的json对象,您可以简单地创建一个新对象,并添加aaa数组,其中的元素与您要删除的元素不匹配。

<?php

$file = '/path/to/your/file';

// Delete this one
$_POST['delete'] = 'xx';

// Get file contents and decode it
$str = file_get_contents( $file );
$json = json_decode( $str );

// Create a new object
$temp = new stdClass;

// Add only the objects we want to keep
foreach( $json->aaa as $obj )
    if( $obj->title != $_POST['delete'] )
        $temp->aaa[] = $obj;

// Replace the file contents
file_put_contents( 
    $file, 
    json_encode( $temp ) 
);