

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從 Step Functions 中的內容物件存取執行資料
<a name="input-output-contextobject"></a>

**管理狀態和轉換資料**  
了解如何[使用變數在狀態與使用 JSONata 轉換資料之間傳遞資料](workflow-variables.md)。 [ JSONata](transforming-data.md)

內容物件是在執行期間可用的內部 JSON 結構，其中包含狀態機器和執行的相關資訊。內容提供工作流程特定執行的相關資訊。您的工作流程可以使用 參考 JSONata 表達式中的內容物件`$states.context`。

## 存取內容物件
<a name="contextobject-access"></a>

**存取 JSONata 中的內容物件**

若要以 JSONata 狀態存取內容物件，請在 JSONata 表達式`$states.context`中使用 。

```
{
  "ExecutionID" : "{% $states.context.Execution.Id %}"
}
```

**在 JSONPath 中存取內容物件**

若要存取 JSONPath 中的內容物件，請先附加`.$`至金鑰的結尾，以指出值為路徑。然後，在值前面加上 ，`$$.`以選取內容物件中的節點。

```
{
  "ExecutionID.$": "$$.Execution.Id"
}
```

JSONPath 狀態可以參考下列 JSONPath 欄位的內容 (`$$.`)：
+ `InputPath`
+ `OutputPath`
+ `ItemsPath` （在映射狀態下）
+ `Variable` （在選擇狀態）
+ `ResultSelector`
+ `Parameters`
+ 變數對變數比較運算子的變數

## 內容物件欄位
<a name="contextobject-format"></a>

內容物件包含狀態機器、狀態、執行和任務的相關資訊。內容 JSON 物件包含每種資料類型的節點，格式如下：

```
{
    "Execution": {
        "Id": "String",
        "Input": {},
        "Name": "String",
        "RoleArn": "String",
        "StartTime": "Format: ISO 8601",
        "RedriveCount": Number,
        "RedriveTime": "Format: ISO 8601"
    },
    "State": {
        "EnteredTime": "Format: ISO 8601",
        "Name": "String",
        "RetryCount": Number
    },
    "StateMachine": {
        "Id": "String",
        "Name": "String"
    },
    "Task": {
        "Token": "String"
    }
}
```

在執行期間，內容物件會填入相關資料。

有時候，新的欄位會新增至內容。如果您直接處理 JSON 內容，建議您製作可正常處理新未知欄位的程式碼。例如，如果使用 Jackson 程式庫取消封送 JSON，建議您在 `false`中`FAIL_ON_UNKNOWN_PROPERTIES`將 設定為 `ObjectMapper` ，以防止 `UnrecognizedPropertyException`。

 `RedriveTime` 內容物件只有在您有redriven執行時才可用。如果您有 [redriven a Map Run](redrive-map-run.md)，`RedriveTime`內容物件僅適用於 Standard 類型的子工作流程。對於具有 Express 類型的子工作流程的 redriven Map Run， `RedriveTime` 無法使用。

執行中執行的內容包含以下格式的詳細資訊：

```
{
    "Execution": {
        "Id": "arn:aws:states:region:123456789012:execution:stateMachineName:executionName",
        "Input": {
           "key": "value"
        },
        "Name": "executionName",
        "RoleArn": "arn:aws:iam::123456789012:role...",
        "StartTime": "2025-08-27T10:04:42Z"
    },
    "State": {
        "EnteredTime": "2025-08-27T10:04:42.001Z",
        "Name": "Test",
        "RetryCount": 3
    },
    "StateMachine": {
        "Id": "arn:aws:states:region:123456789012:stateMachine:stateMachineName",
        "Name": "stateMachineName"
    },
    "Task": {
        "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W"
    }
}
```

**具有小數秒的時間戳記格式**  
Step Functions 遵循 ISO8601 規格，該規格指出輸出可以是零、三、六或九位數。當時間戳記具有零分秒時，Step Functions 會移除結尾的零，而不是填補輸出。  
如果您建立使用 Step Functions 時間戳記的程式碼，您的程式碼必須能夠處理小數秒的變數數目。

## Map 狀態的內容物件資料
<a name="contextobject-map"></a>

**管理狀態和轉換資料**  
了解如何[使用變數在狀態與使用 JSONata 轉換資料之間傳遞資料](workflow-variables.md)。 [ JSONata](transforming-data.md)

處理[`Map`狀態](state-map.md)時，內容也會包含 `Index`、 `Value`和 `Source`。

對於每個`Map`狀態反覆運算， `Index` 包含目前正在處理的陣列項目索引號碼、`Value`包含正在處理的陣列項目，並將`Source`是 `CSV`、`JSON`、 `JSONL`或 的 InputType`PARQUET`。

在 `Map` 狀態中，內容物件包含下列資料：

```
"Map": {
   "Item": {
      "Index" : Number,
      "Key"   : "String", // Only valid for JSON objects
      "Value" : "String",
      "Source": "String"
   }
}
```

這些只能在 `Map` 狀態中使用，並且可以在 `ItemSelector （地圖）` 欄位中指定。

**注意**  
您必須從主要`Map`狀態`ItemSelector`區塊中的內容物件定義參數，而不是在`ItemProcessor`區段中包含的狀態內。

如果狀態機器使用 **JSONPath** `Map` 狀態，您可以從內容物件插入資訊，如下所示。

```
{
  "StartAt": "ExampleMapState",
  "States": {
    "ExampleMapState": {
      "Type": "Map",
      "ItemSelector": {
        "ContextIndex.$": "$$.Map.Item.Index",
        "ContextValue.$": "$$.Map.Item.Value",
        "ContextSource.$": "$$.Map.Item.Source"
      },
      "ItemProcessor": {
        "ProcessorConfig": {
          "Mode": "INLINE"
        },
        "StartAt": "TestPass",
        "States": {
          "TestPass": {
            "Type": "Pass",
            "End": true
          }
        }
      },
      "End": true
    }
  }
}
```

對於 JSONata，您可以從 `$states.context`變數存取額外的映射狀態內容資訊：

```
{
  "StartAt": "ExampleMapState",
  "States": {
    "ExampleMapState": {
      "Type": "Map",
      "ItemSelector": {
        "ContextIndex": "{% $states.context.Map.Item.Index %}",
        "ContextValue": "{% $states.context.Map.Item.Value %}",
        "ContextSource": "{% $states.context.Map.Item.Source %}"
      },
      "ItemProcessor": {
        "ProcessorConfig": {
          "Mode": "INLINE"
        },
        "StartAt": "TestPass",
        "States": {
          "TestPass": {
            "Type": "Pass",
            "End": true
          }
        }
      },
      "End": true
    }
  }
}
```



如果您使用下列輸入執行先前的狀態機器，`Index` 和 `Value` 會插入到輸出中。

```
[
  {
    "who": "bob"
  },
  {
    "who": "meg"
  },
  {
    "who": "joe"
  }
]
```

執行的輸出會傳回三個反覆運算中的每個 `Index`和 `Value`項目的值，如下所示：

```
[
  {
    "ContextIndex": 0,
    "ContextValue": {
      "who": "bob"
    },
    "ContextSource" : "STATE_DATA" 
  },
  {
    "ContextIndex": 1,
    "ContextValue": {
      "who": "meg"
    },
    "ContextSource" : "STATE_DATA" 
  },
  {
    
    "ContextIndex": 2,
    "ContextValue": {
      "who": "joe"
    },
    "ContextSource" : "STATE_DATA" 
  }
]
```

請注意， `$states.context.Map.Item.Source` 將是下列其中一項：
+ 對於狀態輸入，值將為 ： `STATE_DATA`
+ 對於`Amazon S3 LIST_OBJECTS_V2`使用 的 `Transformation=NONE`，值會顯示儲存貯體的 S3 URI。例如：`S3://bucket-name`。
+ 對於所有其他輸入類型，值將是 Amazon S3 URI。例如：`S3://bucket-name/object-key`。