使用php从json中删除

时间:2011-08-12 18:53:46

标签: php json

my current json code:

{"Results":[{"username":"test","password":"test"},{"username":"test","password":"test"},{"username":"google","password":"test"},{"username":"yahoo","password":"test"},{"username":"hotmail","password":"test"}]}

我想删除它:

{"username":"google","password":"test"}

从使用php的代码。 我尝试通过解码json到数组删除,但不能完成它。 任何解决方案?

6 个答案:

答案 0 :(得分:6)

$json_obj = json_decode($json_string);
$unset_queue = array();

foreach ( $json_obj->Results as $i => $item )
{
    if ($item->username == "google")
    {
        $unset_queue[] = $i;
    }
}

foreach ( $unset_queue as $index )
{
    unset($json_obj->Results[$index]);
}

// rebase the array
$json_obj->Results = array_values($json_obj->Results);

$new_json_string = json_encode($json_obj);

答案 1 :(得分:3)

<?php

  $JSON = '{"Results":['
          . '{"username":"test","password":"test"},'
          . '{"username":"test","password":"test"},'
          . '{"username":"google","password":"test"},'
          . '{"username":"yahoo","password":"test"},'
          . '{"username":"hotmail","password":"test"}'
        . ']}';

  // use json_decode to parse the JSON data in to a PHP object
  $jsonInPHP = json_decode($JSON);

  // now iterate over the results and remove the one that's google
  $results = count($jsonInPHP->Results);
  for ($r = 0; $r < $results; $r++){

    // look for the entry we are trying to find
    if ($jsonInPHP->Results[$r]->username == 'google'
     && $jsonInPHP->Results[$r]->password == 'test'){

      // remove the match
      unset($jsonInPHP->Results[$r]);

      // now we can either break out of the loop (only remove first match)
      // or you can use subtract one from $r ($r--;) and keep going and
      // find all possible matches--your decision.
      break;
    }
  }

  // now that we removed items the keys will be off. let's re-order the keys
  // so they're back in-line
  $jsonInPHP->Results = array_values($jsonInPHP->Results);

  // dump the new JSON data, less google's entry
  echo json_encode($jsonInPHP);

我将如何处理它。当我需要修改数组本身时,我喜欢避免使用foreach(...){}语句。顺便说一下,上面的代码留给你:

{
  "Results":[
    {"username":"test","password":"test"},
    {"username":"test","password":"test"},
    {"username":"yahoo","password":"test"},
    {"username":"hotmail","password":"test"}
  ]
}

答案 2 :(得分:0)

$myArray=json_decode($theJSONstring);
unset($myArray['Results'][2]);

答案 3 :(得分:0)

$json = '
{
  "Results":[
    {"username":"test","password":"test"},
    {"username":"test","password":"test"},
    {"username":"google","password":"test"},
    {"username":"yahoo","password":"test"},
    {"username":"hotmail","password":"test"}
  ]
}';

$arr = json_decode($json, true);
array_filter($arr, function($v) {
  return !($v['username'] == 'google' && $v['password'] == 'test');
});
$json = json_encode($arr);

答案 4 :(得分:0)

$input='{"Results":[{"username":"test","password":"test"},{"username":"test","password":"test"},{"username":"google","password":"test"},{"username":"yahoo","password":"test"},{"username":"hotmail","password":"test"}]}';

$json = json_decode($input,true);
$match = array('username'=>'google', 'password'=>'test');
unset($json['Results'][array_search($match,$json['Results'])]);

在没有foreach的情况下执行此操作,但假设您知道要删除的确切值

答案 5 :(得分:0)

老问题,以不同方式格式化您的JSON会有很大帮助。 每个结果条目都应该有一个唯一的密钥来标识它。 这使得在需要删除或更新结果时很容易。 没有理由以这种方式迭代整个JSON。

代码看起来像这样

<?php 
 $jsonString = '{"Results":{'
          .'{"username1":{"username":"google","password":"test1"}}'
          .'{"username2":{"username":"yahoo","password":"test2"}}'
          .'{"username3":{"username":"msonline","password":"test3"}}'
          . '}}';
$jsonInPHP = json_decode($jsonString);

$password = $jsonInPHP["username1"]["pasword"];//Returns test1
$username = $jsonInPHP["username1"]["username"];//Returns google

&GT;