2012-10-28 60 views
1

我有一個CFResponse,我想解析爲一個這樣的數組:解析CFResponse到陣列

$response = $this->scan($query);   
$array = $response->body->Items->to_array(); 
print_r($array); 

這給我一個空CFArray,出於某種原因,而

$response->body->Items->to_json(); 

另一隻手給我這個:

{"userID":{"S":"[email protected]"},"password":{"S":"secretPassword"}} 

這只是第一行。 但是,這是我通過$ response-> body得到的;

CFSimpleXML Object ([ConsumedCapacityUnits] => 0.5 [Count] => 2 [Items] => Array ([0] => CFSimpleXML Object ([userID] => CFSimpleXML Object ([S] => [email protected]) [password] => CFSimpleXML Object ([S] => secretPassword)) [1] => CFSimpleXML Object ([userID] => CFSimpleXML Object ([S] => [email protected]) [password] => CFSimpleXML Object ([S] => secretPassword))) [ScannedCount] => 2) 

正如你在這裏看到的,Items是一個數組。它是一個SimpleXMLIterator對象。 有兩行正在返回。

通過調用Items,我只獲得第一個對象。我怎樣才能解析所有的孩子到一個數組中,或者至少讓一個JSON字符串?我試過getChildren(),這沒有奏效。 此外,爲什麼不是to_array()工作?

+0

如果'Items'是一個數組,你有沒有試過'$ array = $ response-> body-> Items;'? – Havelock

+0

是的,就像我說過的那樣,它只返回第一個對象 – NSAddict

回答

1
$query_response = $db->query(array(
     'TableName' => $tableName, 
     'HashKeyValue' => $db->attribute($peer) 
)); 

if (!$query_response->isOK()){ 
    die(json_encode(CFUtilities::convert_response_to_array($query_response))); 
} 

$ps = array(); 

foreach ($query_response->body->Items as $item) 
{ 
    if (empty($item)) continue; 
    $p = array(); 
    $p['P'] = (string) $item->p->S; 
    $p['TIME'] = (integer) $item->TIME->N; 
    $p['STATUS'] = (string) $item->STATUS->S; 
    $p['ICON'] = (string) $v->ICON->S; 
    array_push($ps,$p); 
} 
echo json_encode($ps); 
+0

我用另一個foreach循環做了它,但是string-cast爲我做了訣竅。謝謝! – NSAddict

+1

這看起來並不理想。如果你看看源代碼,下面是它的作用:返回json_decode(json_encode($ response),true); – Buffalo