

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# JMESPath ekspresi dalam AWS SDK untuk PHP Versi 3
<a name="guide_jmespath"></a>

 [JMESPath](http://jmespath.org/)memungkinkan Anda untuk secara deklaratif menentukan cara mengekstrak elemen dari dokumen JSON. Ini AWS SDK untuk PHP memiliki ketergantungan pada [jmespath.php](https://github.com/jmespath/jmespath.php) untuk memberi daya pada beberapa abstraksi tingkat tinggi seperti [Paginator di AWS SDK untuk PHP Versi 3 dan Pelayan di AWS SDK untuk PHP Versi 3](guide_paginators.md)[, tetapi juga mengekspos pencarian di](guide_waiters.md) dan. JMESPath `Aws\ResultInterface` `Aws\ResultPaginator`

Anda dapat bermain-main JMESPath di browser Anda dengan mencoba [JMESPath contoh](http://jmespath.org/examples.html) online. Anda dapat mempelajari lebih lanjut tentang bahasa, termasuk ekspresi dan fungsi yang tersedia, dalam [JMESPath spesifikasi](http://jmespath.org/specification.html).

[AWS CLI](https://aws.amazon.com/cli/)Dukungan JMESPath. Ekspresi yang Anda tulis untuk output CLI 100 persen kompatibel dengan ekspresi yang ditulis untuk. AWS SDK untuk PHP

## Mengekstrak data dari hasil
<a name="extracting-data-from-results"></a>

`Aws\ResultInterface`Antarmuka memiliki `search($expression)` metode yang mengekstrak data dari model hasil berdasarkan JMESPath ekspresi. Menggunakan JMESPath ekspresi untuk menanyakan data dari objek hasil dapat membantu menghapus kode bersyarat boilerplate, dan lebih ringkas mengekspresikan data yang sedang diekstraksi.

Untuk mendemonstrasikan cara kerjanya, kita akan mulai dengan output JSON default di bawah ini, yang menjelaskan dua volume Amazon Elastic Block Store (Amazon EBS) Elastic Block Store (Amazon EBS) yang dilampirkan ke instans Amazon EC2 yang terpisah.

```
$result = $ec2Client->describeVolumes();
// Output the result data as JSON (just so we can clearly visualize it)
echo json_encode($result->toArray(), JSON_PRETTY_PRINT);
```

```
{
    "Volumes": [
        {
            "AvailabilityZone": "us-west-2a",
            "Attachments": [
                {
                    "AttachTime": "2013-09-17T00:55:03.000Z",
                    "InstanceId": "i-a071c394",
                    "VolumeId": "vol-e11a5288",
                    "State": "attached",
                    "DeleteOnTermination": true,
                    "Device": "/dev/sda1"
                }
            ],
            "VolumeType": "standard",
            "VolumeId": "vol-e11a5288",
            "State": "in-use",
            "SnapshotId": "snap-f23ec1c8",
            "CreateTime": "2013-09-17T00:55:03.000Z",
            "Size": 30
        },
        {
            "AvailabilityZone": "us-west-2a",
            "Attachments": [
                {
                    "AttachTime": "2013-09-18T20:26:16.000Z",
                    "InstanceId": "i-4b41a37c",
                    "VolumeId": "vol-2e410a47",
                    "State": "attached",
                    "DeleteOnTermination": true,
                    "Device": "/dev/sda1"
                }
            ],
            "VolumeType": "standard",
            "VolumeId": "vol-2e410a47",
            "State": "in-use",
            "SnapshotId": "snap-708e8348",
            "CreateTime": "2013-09-18T20:26:15.000Z",
            "Size": 8
        }
    ],
    "@metadata": {
        "statusCode": 200,
        "effectiveUri": "https:\/\/ec2.us-west-2.amazonaws.com",
        "headers": {
            "content-type": "text\/xml;charset=UTF-8",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "date": "Wed, 06 May 2015 18:01:14 GMT",
            "server": "AmazonEC2"
        }
    }
}
```

Pertama, kita hanya dapat mengambil volume pertama dari daftar Volume dengan perintah berikut.

```
$firstVolume = $result->search('Volumes[0]');
```

Sekarang, kita menggunakan `wildcard-index` ekspresi `[*]` untuk mengulangi seluruh daftar dan juga mengekstrak dan mengganti nama tiga elemen: `VolumeId` diganti namanya menjadi, diganti namanya menjadi`ID`, `AvailabilityZone` dan tetap. `AZ` `Size` `Size` Kita dapat mengekstrak dan mengganti nama elemen-elemen ini menggunakan `multi-hash` ekspresi yang ditempatkan setelah `wildcard-index` ekspresi.

```
$data = $result->search('Volumes[*].{ID: VolumeId, AZ: AvailabilityZone, Size: Size}');
```

Ini memberi kita array data PHP seperti berikut:

```
array(2) {
  [0] =>
  array(3) {
    'AZ' =>
    string(10) "us-west-2a"
    'ID' =>
    string(12) "vol-e11a5288"
    'Size' =>
    int(30)
  }
  [1] =>
  array(3) {
    'AZ' =>
    string(10) "us-west-2a"
    'ID' =>
    string(12) "vol-2e410a47"
    'Size' =>
    int(8)
  }
}
```

Dalam `multi-hash` notasi, Anda juga dapat menggunakan kunci berantai seperti `key1.key2[0].key3` untuk mengekstrak elemen yang sangat bersarang di dalam struktur. Contoh berikut menunjukkan ini dengan `Attachments[0].InstanceId` kunci, alias sederhana. `InstanceId` (Dalam kebanyakan kasus, JMESPath ekspresi akan mengabaikan spasi.)

```
$expr = 'Volumes[*].{ID: VolumeId,
                     InstanceId: Attachments[0].InstanceId,
                     AZ: AvailabilityZone,
                     Size: Size}';

$data = $result->search($expr);
var_dump($data);
```

Ekspresi sebelumnya akan menampilkan data berikut:

```
array(2) {
  [0] =>
  array(4) {
    'ID' =>
    string(12) "vol-e11a5288"
    'InstanceId' =>
    string(10) "i-a071c394"
    'AZ' =>
    string(10) "us-west-2a"
    'Size' =>
    int(30)
  }
  [1] =>
  array(4) {
    'ID' =>
    string(12) "vol-2e410a47"
    'InstanceId' =>
    string(10) "i-4b41a37c"
    'AZ' =>
    string(10) "us-west-2a"
    'Size' =>
    int(8)
  }
}
```

Anda juga dapat memfilter beberapa elemen dengan `multi-list` ekspresi:`[key1, key2]`. Ini memformat semua atribut yang difilter ke dalam satu daftar berurutan per objek, apa pun jenisnya.

```
$expr = 'Volumes[*].[VolumeId, Attachments[0].InstanceId, AvailabilityZone, Size]';
$data = $result->search($expr);
var_dump($data);
```

Menjalankan pencarian sebelumnya menghasilkan data berikut:

```
array(2) {
  [0] =>
  array(4) {
    [0] =>
    string(12) "vol-e11a5288"
    [1] =>
    string(10) "i-a071c394"
    [2] =>
    string(10) "us-west-2a"
    [3] =>
    int(30)
  }
  [1] =>
  array(4) {
    [0] =>
    string(12) "vol-2e410a47"
    [1] =>
    string(10) "i-4b41a37c"
    [2] =>
    string(10) "us-west-2a"
    [3] =>
    int(8)
  }
}
```

Gunakan `filter` ekspresi untuk memfilter hasil berdasarkan nilai bidang tertentu. Contoh query berikut hanya menghasilkan volume di `us-west-2a` Availability Zone.

```
$data = $result->search("Volumes[?AvailabilityZone ## 'us-west-2a']");
```

JMESPath juga mendukung ekspresi fungsi. Katakanlah Anda ingin menjalankan kueri yang sama seperti di atas, tetapi mengambil semua volume di mana volume berada di AWS Wilayah yang dimulai dengan “us-”. Ekspresi berikut menggunakan `starts_with` fungsi, meneruskan string literal dari`us-`. Hasil fungsi ini kemudian dibandingkan dengan nilai literal JSON`true`, hanya meneruskan hasil predikat filter yang dikembalikan `true` melalui proyeksi filter.

```
$data = $result->search('Volumes[?starts_with(AvailabilityZone, 'us-') ## `true`]');
```

## Mengekstrak data dari paginator
<a name="extracting-data-from-paginators"></a>

Seperti yang Anda ketahui dari [Paginator dalam panduan AWS SDK untuk PHP Versi 3](guide_paginators.md), `Aws\ResultPaginator` objek digunakan untuk menghasilkan hasil dari operasi API pageable. AWS SDK untuk PHP Ini memungkinkan Anda untuk mengekstrak dan mengulangi data yang difilter dari `Aws\ResultPaginator` objek, pada dasarnya menerapkan [peta datar](http://martinfowler.com/articles/collection-pipeline/flat-map.html) di atas iterator di mana hasil JMESPath ekspresi adalah fungsi peta.

Katakanlah Anda ingin membuat sebuah `iterator` yang hanya menghasilkan objek dari ember yang lebih besar dari 1 MB. Ini dapat dicapai dengan terlebih dahulu membuat `ListObjects` paginator dan kemudian menerapkan `search()` fungsi ke paginator, membuat iterator yang dipetakan datar di atas data paginasi.

```
$result = $s3Client->getPaginator('ListObjects', ['Bucket' => 't1234']);
$filtered = $result->search('Contents[?Size > `1048576`]');

// The result yielded as $data will be each individual match from
// Contents in which the Size attribute is > 1048576
foreach ($filtered as $data) {
    var_dump($data);
}
```