2

DynamoDB から結果を返すすべてのメソッドとイテレーターには、次の形式 (json スタイル) が含まれているようです。

{key : [TYPE,value]}

「TYPE」は N、S です...

私はそれらを次の形式にしたい:

{key : value}

'value' は、S の場合は文字列、N の場合は数値 (またはセット形式の場合はそのような配列) です。

API には、配列からタイプごとに属性をフォーマットするためのヘルパーメソッドが含まれています。

私が見落としていた結果に対して逆の処理を行う既存のヘルパー メソッドまたはフラグはありますか?

私はこれの実装がいくぶん簡単であることを知っています.結果を使用するたびに変換を行うのは少し手間がかかるようです. (これは「N」と「S」のケースのみを提供する単純なバージョンです)

$iterator = $client->getIterator('Scan',$params);
foreach($iterator as $item){
    $newitem = [];
    foreach($item as $k => $v){
        foreach($v as $type => $actualv){
            switch($type){
                case 'S' :
                    $newitem[$k] = $actualv;
                    break;
                case 'N' :
                    $newitem[$k] = (int)$actualv;
                    break;
            }
        }
    }
    echo json_encode($newitem).PHP_EOL;
}

すべてのキーをループすることなく、これを簡単にするために見落とした方法はありますか?

4

1 に答える 1

2

[編集: SDK のバージョン 2.4.1 より前のバージョン] このための既存のヘルパーは実際にはありませんが、 を使用しているgetIteratorため、いくつかのイテレータ マジックを使用できます。次のようなことを試してください(元のコードから構築します):

$iterator = $client->getIterator('Scan', $params);
$iterator = new \Guzzle\Iterator\MapIterator($iterator, function ($item) {
    return array_map('current', $item);
});

foreach ($iterator as $item) {
    // Get a single attribute value
    echo $item['attribute_name'] . "\n";

    // Print the item attributes
    echo print_r($item);
}

編集: バージョン 2.4.1+ では、含まれている ItemIterator クラスを使用して、MapIterator で行ったことと同様のことを行うことができます。

$iterator = $client->getIterator('Scan', $params);
$iterator = new \Aws\DynamoDb\Iterator\ItemIterator($iterator);

foreach ($iterator as $item) {
    // Get a single attribute value
    echo $item['attribute_name'] . "\n";

    // Print the item attributes
    echo print_r($item->toArray());
}

編集: Amazon DynamoDB の結果の繰り返しも参照してください。

于 2013-06-08T15:51:19.680 に答える