

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

# Contoh: Memanipulasi data status dengan jalur di alur kerja Step Functions
<a name="input-output-example"></a>

**Mengelola status dan mengubah data**  
Pelajari tentang [Melewati data antar status dengan variabel](workflow-variables.md) dan [Mengubah data dengan JSONata](transforming-data.md).

Topik ini berisi contoh cara memanipulasi input status dan output JSON menggunakan InputPath, ResultPath, dan OutputPath bidang. 

Setiap negara selain [Status alur kerja gagal](state-fail.md) negara bagian atau [Status alur kerja yang berhasil](state-succeed.md) negara dapat mencakup bidang pemrosesan input dan output, seperti`InputPath`,`ResultPath`, atau`OutputPath`. Selain itu, [Tunggu status alur kerja](state-wait.md) dan [Status alur kerja pilihan](state-choice.md) negara bagian tidak mendukung `ResultPath` lapangan. Dengan bidang ini, Anda dapat menggunakan a [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)untuk memfilter data JSON saat bergerak melalui alur kerja Anda. 

Anda juga dapat menggunakan `Parameters` bidang untuk memanipulasi data JSON saat bergerak melalui alur kerja Anda. Untuk informasi tentang penggunaan`Parameters`, lihat[Memanipulasi parameter dalam alur kerja Step Functions](input-output-inputpath-params.md).

Misalnya, mulailah dengan AWS Lambda fungsi dan mesin status yang dijelaskan dalam [Membuat mesin status Step Functions yang menggunakan Lambda](tutorial-creating-lambda-state-machine.md) tutorial. Modifikasi mesin status sehingga termasuk `InputPath`, `ResultPath`, dan `OutputPath` berikut.

```
{
  "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:region:123456789012:function:HelloFunction",
      "InputPath": "$.lambda",
      "ResultPath": "$.data.lambdaresult",
      "OutputPath": "$.data",
      "End": true
    }
  }
}
```

Mulai eksekusi menggunakan input berikut.

```
{
  "comment": "An input comment.",
  "data": {
    "val1": 23,
    "val2": 17
  },
  "extra": "foo",
  "lambda": {
    "who": "AWS Step Functions"
  }
}
```

Asumsikan bahwa `extra` node `comment` dan dapat dibuang, tetapi Anda ingin menyertakan output dari fungsi Lambda, dan menyimpan informasi dalam node. `data`

Dalam mesin status yang diperbarui, status `Task` diubah untuk memproses input ke tugas.

```
"InputPath": "$.lambda",
```

Baris ini dalam ketentuan mesin status membatasi input tugas untuk hanya simpul `lambda` dari input status. Fungsi Lambda hanya menerima objek JSON `{"who": "AWS Step Functions"}` sebagai input. 

```
"ResultPath": "$.data.lambdaresult",
```

Ini `ResultPath` memberitahu mesin status untuk memasukkan hasil dari fungsi Lambda ke simpul bernama `lambdaresult`, sebagai anak dari simpul `data` dalam input mesin status asli. Karena Anda tidak melakukan manipulasi lain pada input asli dan hasilnya menggunakan`OutputPath`, output status sekarang menyertakan hasil fungsi Lambda dengan input asli.

```
{
  "comment": "An input comment.",
  "data": {
    "val1": 23,
    "val2": 17,
    "lambdaresult": "Hello, AWS Step Functions!"
  },
  "extra": "foo",
  "lambda": {
    "who": "AWS Step Functions"
  }
}
```

Tapi, tujuan kami adalah untuk hanya mempertahankan simpul `data`, dan termasuk hasil fungsi Lambda. `OutputPath` memfilter JSON gabungan ini sebelum meneruskannya ke output status.

```
"OutputPath": "$.data",
```

Ini hanya memilih simpul `data` dari input asli (termasuk anak `lambdaresult` yang disisipkan oleh `ResultPath`) untuk diteruskan ke output. Output status difilter ke berikut ini.

```
{
  "val1": 23,
  "val2": 17,
  "lambdaresult": "Hello, AWS Step Functions!"
}
```

Dalam status `Task` ini:

1. `InputPath` hanya mengirimkan simpul `lambda` dari input ke fungsi Lambda.

1. `ResultPath` menyisipkan hasilnya sebagai anak dari simpul `data` dalam input asli.

1. `OutputPath` memfilter input status (yang sekarang termasuk hasil dari fungsi Lambda) sehingga hanya meneruskan simpul `data` ke output status.

**Example untuk memanipulasi input mesin keadaan asli, hasil, dan output akhir menggunakan JsonPath**  
Pertimbangkan mesin negara berikut yang memverifikasi identitas dan alamat pemohon asuransi.  
Untuk melihat contoh lengkapnya, lihat [Cara menggunakan JSON Path di Step Functions](https://github.com/aws-samples/serverless-account-signup-service).

```
{
  "Comment": "Sample state machine to verify an applicant's ID and address",
  "StartAt": "Verify info",
  "States": {
    "Verify info": {
      "Type": "Parallel",
      "End": true,
      "Branches": [
        {
          "StartAt": "Verify identity",
          "States": {
            "Verify identity": {
              "Type": "Task",
              "Resource": "arn:aws:states:::lambda:invoke",
              "Parameters": {
                "Payload.$": "$",
                "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-identity:$LATEST"
              },
              "End": true
            }
          }
        },
        {
          "StartAt": "Verify address",
          "States": {
            "Verify address": {
              "Type": "Task",
              "Resource": "arn:aws:states:::lambda:invoke",
              "Parameters": {
                "Payload.$": "$",
                "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-address:$LATEST"
              },
              "End": true
            }
          }
        }
      ]
    }
  }
}
```
Jika Anda menjalankan mesin status ini menggunakan input berikut, eksekusi gagal karena fungsi Lambda yang melakukan verifikasi hanya mengharapkan data yang perlu diverifikasi sebagai input. Oleh karena itu, Anda harus menentukan node yang berisi informasi yang akan diverifikasi menggunakan yang sesuai JsonPath.  

```
{
  "data": {
    "firstname": "Jane",
    "lastname": "Doe",
    "identity": {
      "email": "jdoe@example.com",
      "ssn": "123-45-6789"
    },
    "address": {
      "street": "123 Main St",
      "city": "Columbus",
      "state": "OH",
      "zip": "43219"
    },
    "interests": [
      {
        "category": "home",
        "type": "own",
        "yearBuilt": 2004
      },
      {
        "category": "boat",
        "type": "snowmobile",
        "yearBuilt": 2020
      },
      {
        "category": "auto",
        "type": "RV",
        "yearBuilt": 2015
      },
    ]
  }
}
```
Untuk menentukan node yang harus digunakan fungsi `check-identity` Lambda, gunakan `InputPath` bidang sebagai berikut:  

```
"InputPath": "$.data.identity"
```
Dan untuk menentukan node yang harus digunakan fungsi `check-address` Lambda, gunakan `InputPath` bidang sebagai berikut:  

```
"InputPath": "$.data.address"
```
Sekarang jika Anda ingin menyimpan hasil verifikasi dalam input mesin status asli, gunakan `ResultPath` bidang sebagai berikut:  

```
"ResultPath": "$.results"
```
Namun, jika Anda hanya membutuhkan identitas dan hasil verifikasi dan membuang input asli, gunakan `OutputPath` bidang sebagai berikut:  

```
"OutputPath": "$.results"
```

Untuk informasi selengkapnya, lihat [Memproses input dan output di Step Functions](concepts-input-output-filtering.md).

## Memfilter output status menggunakan OutputPath
<a name="input-output-outputpath"></a>

Dengan `OutputPath` Anda dapat memilih sebagian dari output negara untuk diteruskan ke keadaan berikutnya. Dengan pendekatan ini, Anda dapat menyaring informasi yang tidak diinginkan, dan hanya meneruskan sebagian JSON yang Anda butuhkan.

Jika Anda tidak menentukan `OutputPath` nilai default-nya adalah `$`. Ini meneruskan seluruh simpul JSON (ditentukan oleh input status, hasil tugas, dan `ResultPath`) ke status berikutnya.