2014-10-06 64 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);