从php编辑json对象

从php编辑json对象,php,json,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"){ }

我以这种方式读取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"){   

             }
         }
    }
}
当我在if中时,我应该能够更改对象的某些变量,我已经尝试了各种方法,但没有成功

对象$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"
  }
} 

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

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);

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

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);
试试这个:

$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的一部分。

请尝试以下操作:

$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。

当使用json_解码(json_编码的_对象)时,它返回对象

若要在数组中获得结果,请在json_decode()函数中传递第二个参数“true”

如下所示:json_解码(json_编码的_对象,true)

当使用json_解码(json_编码的_对象)时,它返回object

若要在数组中获得结果,请在json_decode()函数中传递第二个参数“true”


如下所示:json_解码(json_编码的_对象,true)

json_解码。。。更改数组/对象。。然后再次对其进行编码?您是如何尝试更改属性的?在foreach中通过引用传递属性,并将其设置为
$mydata3->obj->property='new'json_解码。。。更改数组/对象。。然后再次对其进行编码?您是如何尝试更改属性的?在foreach中通过引用传递属性,并将其设置为
$mydata3->obj->property='new'我已经更新了问题。。我应该能够修改(例如)indirizzo_语言环境->ip@WhiteLine然后更改该属性-我更新了illustrateok的答案问题是当我返回新的json更改时。我返回了$dati,而不是json_encode($app),谢谢。我已经更新了这个问题。。我应该能够修改(例如)indirizzo_语言环境->ip@WhiteLine然后更改该属性-我更新了illustrateok的答案问题是当我返回新的json更改时。我返回了$dati而不是json_encode($app),谢谢