

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# JSONPath 경로 사용
<a name="amazon-states-language-paths"></a>

**상태 관리 및 데이터 트랜스포밍**  
[변수를 사용하여 상태 간 데이터 전달](workflow-variables.md)과 [JSONata를 사용하여 데이터 트랜스포밍](transforming-data.md)에 대해 알아봅니다.

Amazon States Language에서 *경로*는 JSON 텍스트 내 구성 요소를 식별하는 데 사용할 수 있는 `$`로 시작하는 문자열입니다. 경로는 `QueryLanguage`가 [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)로 설정된 경우에만 사용할 수 있는 JSONPath 구문을 따릅니다. `InputPath`, `ResultPath` 및 `OutputPath`의 값을 지정할 때 입력 하위 집합에 액세스하기 위한 경로를 지정할 수 있습니다

필드 이름에 [JsonPath ABNF](https://www.ietf.org/archive/id/draft-ietf-jsonpath-base-21.html#jsonpath-abnf) 규칙의 `member-name-shorthand` 정의에 포함되지 않은 문자가 포함된 경우에는 대괄호 표기법을 사용해야 합니다. 따라서 구두점(`_` 제외)과 같은 특수 문자를 인코딩하려면 대괄호 표기법을 사용해야 합니다. 예를 들어 `$.abc.['def ghi']`입니다.

## 참조 경로
<a name="amazon-states-language-reference-paths"></a>

*참조 경로*는 JSON 구조에서 단일 노드만 식별할 수 있는 방식으로 구문이 제한되는 경로입니다.
+ 객체 필드는 점(`.`) 및 대괄호(`[ ]`) 표기를 통해서만 액세스할 수 있습니다.
+ `length()`가 지원되지 않은 등의 함수
+ 기호가 아닌 어휘 연산자(예: `subsetof`)는 지원되지 않습니다.
+ 정규 표현식을 기준으로 또는 JSON 구조의 다른 값을 참조하는 필터링은 지원되지 않습니다.
+ `@`, `,`, `:`, `?` 연산자는 지원되지 않습니다.

예를 들어 상태 입력 데이터에 다음과 같은 값이 포함된 경우:

```
{
  "foo": 123,
  "bar": ["a", "b", "c"],
  "car": {
      "cdr": true
  }
}
```

다음과 같은 참조 경로가 반환합니다.

```
$.foo => 123
$.bar => ["a", "b", "c"]
$.car.cdr => true
```

특정 상태에서는 경로 및 참조 경로를 사용하여 상태 머신의 흐름을 제어하거나 상태 설정 또는 옵션을 구성합니다. 자세한 내용은 [데이터 흐름 시뮬레이터를 사용한 워크플로 입력 및 출력 경로 처리 모델링](https://aws.amazon.com/blogs/compute/modeling-workflow-input-output-path-processing-with-data-flow-simulator/) 및 [에서 JSONPath를 효과적으로 사용을AWS Step Functions](https://aws.amazon.com/blogs/compute/using-jsonpath-effectively-in-aws-step-functions/) 참조하세요.

### 배열의 배열 평면화
<a name="flatten-array-of-arrays"></a>

상태 머신의 [병렬 워크플로 상태](state-parallel.md) 또는 [Map 워크플로 상태](state-map.md) 상태에서 배열의 배열을 반환하는 경우 [ResultSelector](input-output-inputpath-params.md#input-output-resultselector) 필드를 사용하여 배열을 평면 배열로 변환할 수 있습니다. Parallel 또는 Map 상태 정의 내에 이 필드를 포함하여 이러한 상태의 결과를 조작할 수 있습니다.

배열을 평면화하려면 다음 예시와 같이 `ResultSelector` 필드에서 `[*]` 구문을 사용합니다.

```
"ResultSelector": {
    "flattenArray.$": "$[*][*]"
  }
```

배열을 평면화하는 방법을 보여주는 예제는 다음 자습서의 *3단계*를 참조하세요.
+ [Step Functions에서 Lambda 함수를 사용하여 배치 데이터 처리](tutorial-itembatcher-param-task.md)
+ [Step Functions에서 Lambda 함수를 사용하여 개별 항목 처리](tutorial-itembatcher-single-item-process.md)