1

CFResponseがあり、次のような配列に解析したいと思います。

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

これにより、何らかの理由で空のCFArrayが得られます。

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

もう一方の手は私にこれを与えます:

{"userID":{"S":"someemail@me.com"},"password":{"S":"secretPassword"}}

これは最初の行だけです。しかし、これは私が$response->bodyから得たものです。

CFSimpleXML Object ( [ConsumedCapacityUnits] => 0.5 [Count] => 2 [Items] => Array ( [0] => CFSimpleXML Object ( [userID] => CFSimpleXML Object ( [S] => someemail@me.com ) [password] => CFSimpleXML Object ( [S] => secretPassword ) ) [1] => CFSimpleXML Object ( [userID] => CFSimpleXML Object ( [S] => somemoreemail@me.com ) [password] => CFSimpleXML Object ( [S] => secretPassword ) ) ) [ScannedCount] => 2 )

ここでわかるように、Itemsは配列です。SimpleXMLIteratorオブジェクトです。返される行は2つあります。

Itemsを呼び出すと、最初のオブジェクトのみが取得されます。すべての子を配列に解析する、または少なくともjson文字列を作成するにはどうすればよいですか?getChildren()を試しましたが、機能しませんでした。また、なぜ機能しないのto_array()ですか?

4

1 に答える 1

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);
于 2012-10-29T08:30:30.480 に答える