从php编辑一个json对象

时间:2014-10-06 12:38:40

标签: php json

我以这种方式读了一个json

$app = json_decode($dati);
foreach($app->ambient as $mydata){
    foreach($mydata->layer as $mydata2){
         foreach($mydata2->layer_obj as $mydata3){
             if($mydata3->obj == "ipcam"){   

             }
         }
    }
}

当我进入如果我应该能够更改对象的某个变量时,我已经尝试了各种方式,但没有成功

对象$ mydata3就是那样的

{
  obj: "ipcam",
  indirizzo_locale: {
       ip: "0.0.0.0",
       port: "80",
       url: "/test",
       username: "admin",
       password: "admin"
  },
  indirizzo_remoto: {
      ip: "0.0.0.0",
      port: "80",
      url: "/test",
      username: "admin",
      password: "admin"
  }
} 

3 个答案:

答案 0 :(得分:3)

如果您需要对正在迭代的对象进行更改,则需要使用&符号通过引用访问成员:

foreach($app->ambient as &$mydata){
    foreach($mydata->layer as &$mydata2){
         foreach($mydata2->layer_obj as &$mydata3){
             if($mydata3->obj == "ipcam"){
                 $mydata3->indirizzo_locale->ip = 'you changed the ip';
             }
         }
    }
}

var_dump($app);

答案 1 :(得分:1)

试试这个:

$app = json_decode($dati);
foreach($app->ambient as &$mydata){
    foreach($mydata->layer as &$mydata2){
         foreach($mydata2->layer_obj as &$mydata3){
             if($mydata3->obj == "ipcam"){   

             }
         }
    }
}

变量通过引用调用,这意味着在编辑像$ mydata3这样的变量时,你也可以改变$ app。

否则你只会更改$ app的一小部分副本,这些副本不属于$ app。

答案 2 :(得分:0)

当使用json_decode(json_encoded_object)时,它返回对象,

如果你想得到数组传递结果第二个参数' true'在json_decode()函数中。

像这样:json_decode(json_encoded_object,true);