2011-05-24 69 views
0

我目前有一些代碼從站點獲取一些JSON。這基本上是我目前所做的我應該如何處理可能具有對象或數組值的鍵?

$valueObject = array(); 
if (isset($decoded_json->NewDataSet)) { 
      foreach ($decoded_json->NewDataSet->Deeper as $state) { 
       $i = count($valueObject); 
       $valueObject[$i] = new ValueObject(); 
       $valueObject[$i]->a = $state->a; 
} 

現在只有一個「更深」的問題發生。服務器將其作爲JSON對象返回。 $ state然後成爲Deeper對象中的每個鍵。例如$ state-> a將不存在,直到位置7附近。有什麼方法可以將深度從JSON對象轉換爲數組,當深度數爲1時?

希望這有助於說明我的問題:

"NewDataSet": { 
     "Deeper": [ 
      { 
       "a": "112", 
       "b": "1841" 
      }, 
      { 
       "a": "111", 
       "b": "1141" 
      } 
     ] 
    } 
} 

"NewDataSet": { 
     "Deeper": 
      { 
       "a": "51", 
       "b": "12" 
      } 
} 

上述轉換爲

"NewDataSet": { 
     "Deeper": [ 
      { 
       "a": "51", 
       "b": "12" 
      } 
     ] 
} 

將是巨大的。我不知道如何做到這一點

+1

也許我想在這裏很簡單,但爲什麼不做一個轉換爲數組?否則,只需檢查它的對象或數組 – Hannes 2011-05-24 16:02:53

+0

@Hannes:當count()返回一個我想將其轉換爲數組。這就是我正在尋找的,我不知道該怎麼做。 count($ json-> NewDataSet-> Deeper)== 1表示對象。問題是當我填充30個字段值對象時,我不想複製該對象。 – flumpb 2011-05-24 16:06:19

回答

1

之前

foreach ($decoded_json->NewDataSet->Deeper as $state)

你可能想:

if (is_array($decoded_json->NewDataSet)) { 
    // This is when Deeper is a JSON array. 
    foreach ($decoded_json->NewDataSet->Deeper as $state) { 
     // ... 
    } 
} else { 
    // This is when Deeper is a JSON object. 
} 

更新
如果你只是想$decoded_json->NewDataSet->Deeper到一個數組,那麼:

if (!is_array($decoded_json->NewDataSet->Deeper)) { 
    $decoded_json->NewDataSet->Deeper = array($decoded_json->NewDataSet->Deeper); 
} 

foreach ($decoded_json->NewDataSet->Deeper as $state) { 
    // ... 
} 
+0

+1這實際上是我一直在做的,除了用is_array清潔。我將創建一個私有函數來幫助填充傳遞的ValueObject。謝謝 – flumpb 2011-05-24 16:12:12

+1

@kisplit - 看我的更新 – 2011-05-24 16:16:18

+0

甜,感謝這很好 – flumpb 2011-05-24 16:18:14

相關問題