Удалить из JSON с помощью PHP

0

my Текущий код json:

{"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 до массива, но не могу сделать это. любое решение?

  • 0
    Можете ли вы показать нам код?
  • 0
    код? которого ?
Показать ещё 1 комментарий
Теги:

6 ответов

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);
  • 0
    +1 для сброса за пределами foreach, чтобы не разрушить итерацию. Умная!
  • 0
    да, у меня были некоторые петли, становящиеся немного странными, когда я не делаю это ...
Показать ещё 3 комментария
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 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 re-order the keys
  // so they're back in-line
  $jsonInPHP->Results = array_values($jsonInPHP->Results);

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

Было бы так, как я к нему подхожу. Мне нравится избегать операторов foreach(...){}, когда мне нужно изменить сам массив. Вышеприведенный код, кстати, оставляет вас:

{
  "Results":[
    {"username":"test","password":"test"},
    {"username":"test","password":"test"},
    {"username":"yahoo","password":"test"},
    {"username":"hotmail","password":"test"}
  ]
}
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

? >

0
$myArray=json_decode($theJSONstring);
unset($myArray['Results'][2]);
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);
  • 0
    я не хочу использовать [2], так как не могу понять значение
  • 1
    @ codecute: А, пожалуйста, укажите это в вопросе. :)
Показать ещё 1 комментарий
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, но при условии, что вы знаете точные значения, которые вы хотите удалить

Ещё вопросы

Сообщество Overcoder
Наверх
Меню