

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Step Functions ResultPath 中使用指定状态输出
<a name="input-output-resultpath"></a>

**管理状态和转换数据**  
本页指的是 JSONPath。Step Functions 最近添加了变量 JSONata ，用于管理状态和转换数据。  
了解如何[使用变量传递数据](workflow-variables.md)和[使用转换数据 JSONata](transforming-data.md)。

状态的输出可以是其输入的副本、其生成的结果（例如，`Task` 状态的 Lambda 函数的输出）或其输入和结果的组合。使用 `ResultPath` 可控制传递到状态输出的上述两种内容的组合。

以下状态类型可以生成结果且包含 `ResultPath:`
+ [Pass 工作流程状态](state-pass.md)
+ [Task 工作流程状态](state-task.md)
+ [Parallel 工作流程状态](state-parallel.md)
+ [Map 状态工作流程。](state-map.md)

使用 `ResultPath` 可将任务结果与任务输入组合，或可选择二者之一。提供给 `ResultPath` 的路径控制将传递到输出的信息。

**注意**  
 `ResultPath` 仅限于使用[引用路径](amazon-states-language-paths.md#amazon-states-language-reference-paths)，这会限制其范围，因此该路径必须仅标识 JSON 中的单一节点。请参阅 [Amazon States Language](concepts-amazon-states-language.md) 中的 [引用路径](amazon-states-language-paths.md#amazon-states-language-reference-paths)。

## 用于 ResultPath 用任务结果替换输入
<a name="input-output-resultpath-default"></a>

如果未指定 `ResultPath`，则默认行为与 `"ResultPath": "$"` 相同。该状态会将整个状态输入替换为任务结果。

```
# State Input
{  
 "comment": "This is a test",
 "details": "Default example",
 "who" : "Step Functions"
}

# Path 
"ResultPath": "$"

# Task result
"Hello, Step Functions!"

# State Output
"Hello, Step Functions!"
```

**注意**  
`ResultPath` 用于包含结果内容与输入，然后再将其传递到输出。但是，如果未指定 `ResultPath`，则默认操作为替换整个输入。

## 丢弃结果并保留原始输入
<a name="input-output-resultpath-null"></a>

如果将 `ResultPath` 设置为 `null`，则该状态会将**原始输入**传递给输出。该状态的输入有效载荷将直接复制到输出中，而不考虑任务结果。

```
# State Input
{  
 "comment": "This is a test",
 "details": "Default example",
 "who" : "Step Functions"
}

# Path 
"ResultPath": null

# Task result
"Hello, Step Functions!"

# State Output
{  
 "comment": "This is a test",
 "details": "Default example",
 "who" : "Step Functions"
}
```

## 用于 ResultPath 将结果包含在输入中
<a name="input-output-resultpath-append"></a>

如果您为指定路径 ResultPath，则状态输出将合并状态输入和任务结果：

```
# State Input
{  
 "comment": "This is a test",
 "details": "Default example",
 "who" : "Step Functions"
}

# Path 
"ResultPath": "$.taskresult"

# Task result
"Hello, Step Functions!"

# State Output
{  
 "comment": "This is a test",
 "details": "Default example",
 "who" : "Step Functions",
 "taskresult" : "Hello, Step Functions!"
}
```

还可以将结果插入输入的子节点。将 `ResultPath` 设置为以下内容。

```
"ResultPath": "$.strings.lambdaresult"
```

如果使用以下输入：

```
{
  "comment": "An input comment.",
  "strings": {
    "string1": "foo",
    "string2": "bar",
    "string3": "baz"
  },
  "who": "AWS Step Functions"
}
```

任务结果将作为输入中 `strings` 节点的子节点插入。

```
{
  "comment": "An input comment.",
  "strings": {
    "string1": "foo",
    "string2": "bar",
    "string3": "baz",
    "lambdaresult": "Hello, Step Functions!"
  },
  "who": "AWS Step Functions"
}
```

状态输出现在包含原始输入 JSON 与作为子节点的结果。

## ResultPath 用于用结果更新输入中的节点
<a name="input-output-resultpath-amend"></a>

如果您为指定现有节点 ResultPath，则任务结果将替换该现有节点：

```
# State Input
{  
 "comment": "This is a test",
 "details": "Default example",
 "who" : "Step Functions"
}

# Path 
"ResultPath": "$.comment"

# Task result
"Hello, Step Functions!"

# State Output
{  
 "comment": "Hello, Step Functions!",
 "details": "Default example",
 "who" : "Step Functions"
}
```

## ResultPath 用于在 a 中同时包含错误和输入 `Catch`
<a name="input-output-resultpath-catch"></a>

在某些情况下，您可能希望保留原始输入与错误。在 `Catch` 中使用 `ResultPath` 可包含错误与原始输入，而不是替换它。

```
"Catch": [{ 
  "ErrorEquals": ["States.ALL"], 
  "Next": "NextTask", 
  "ResultPath": "$.error" 
}]
```

如果上一 `Catch` 语句捕获错误，则它将在状态输入的 `error` 节点中包含结果。例如，对于以下输入：

```
{"foo": "bar"}
```

捕获错误时，状态输出为以下内容。

```
{
  "foo": "bar",
  "error": {
    "Error": "Error here"
  }
}
```

有关错误处理的更多信息，请参阅以下内容：
+ [处理 Step Functions 工作流程中的错误](concepts-error-handling.md)
+ [在 Step Functions 状态机中处理错误条件](tutorial-handling-error-conditions.md)