2012-10-28 130 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