搜索并取消设置 JSON 对象

Posted

技术标签:

【中文标题】搜索并取消设置 JSON 对象【英文标题】:Search and unset JSON object 【发布时间】:2012-11-07 21:27:17 【问题描述】:

我正在尝试在我的 json 文件中搜索一个 id 并使用 php 删除该对象。

详细说明:我使用 jQuery post 将 ID 发布到我的 delete.php 并在我的 delete.php 文件中搜索 ID 并取消设置。但由于某种原因,如果我取消设置第一个对象,它会在我的 json 中添加一个数字并破坏它(我仍然可以添加更多对象,但会破坏第一个对象)。

// delete.php 文件如下所示:

if(isset($_POST['deleteData']))
    $data = $_POST['deleteData'];
    $dataJSON = json_decode(file_get_contents('datas.json'), true);  
    for($i = 0, $dataJSONLength = count($dataJSON); $i < $dataJSONLength; $i++)
      if($dataJSON[$i][data][0][id] == $data)
        unset($dataJSON[$i]);
        echo 'deleted';// needed for callback for feedback
      
    
    file_put_contents('datas.json', json_encode($dataJSON));
  

// add.php 为:

if(isset($_POST['addData']))
  $dataJSON = json_decode(file_get_contents('datas.json'), true);
  $dataJSON[] = $_POST['addData'];
  file_put_contents('datas.json', json_encode($dataJSON));

我的 datas.json 文件非常嵌套,所以我将发布问题所在:

["user":["browser":[" // this is what it looks like when I add

"1":"user":["browser":[" // this is what happens when I delete the first object. Notice "1" 

如果我不删除第一个对象,那么在删除第一个对象之前一切正常。有什么建议?谢谢。 (如果需要我可以发布整个 json 文件)

【问题讨论】:

您可以在搜索时尝试将所有项目移动到一个新数组中:if($dataJSON[$i][data][0][id] != $data) $newData[]=$dataJSON[$i]; 【参考方案1】:

PHP 将您的数组转换为对象可能是因为 unset 为您提供了关联数组而不是索引数组。根据this post 中的想法,您应该调用 array_splice 而不是 unset,或者在取消设置您的值之后调用 array_values。

// your for loop:
for (...) 
    unset($dataJSON[$i]);
    ...

// After your for loop with all necessary values removed then call array_values to normalize the array.
$dataJSON = array_values($dataJSON);

【讨论】:

以上是关于搜索并取消设置 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

搜索包含值的 json 对象键,然后取消设置它

如何取消设置 json 对象

取消设置数组为 PHP 中的对象添加键

php中特定索引处的JSON未设置元素

Wix Burn:注册表搜索失败时取消设置变量

取消设置数组中的索引将其转换为对象