2014-10-06 35 views
0

JSON对象我这样读了JSON编辑从PHP

$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" 
    } 
} 
+0

json_decode ...更改数组/对象..然后再次json_encode它? – 2014-10-06 12:40:25

+0

**您是如何尝试更改**属性**的?在foreach中通过引用传递属性,并将其设置为'$ mydata3-> obj-> property ='new';' – DanFromGermany 2014-10-06 12:43:32

回答

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

我已更新问题..我应该能够修改(例如)indirizzo_locale-> ip – WhiteLine 2014-10-06 12:52:26

+0

@WhiteLine然后改变那个属性 - 我更新了我的答案来说明 – Steve 2014-10-06 12:55:03

+0

好的问题是当我返回新的json改变了。我返回了$ dati而不是json_encode($ app),谢谢 – WhiteLine 2014-10-06 12:59:25

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

使用json_decode(json_encoded_object)时
0

,它返回的对象,如果你想获得导致数组传递第二个参数“真”的json_decode()函数

像这样:json_decode(json_encoded_object,true);