

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Manipolazione dei parametri nei flussi di lavoro di Step Functions
<a name="input-output-inputpath-params"></a>

**Gestione dello stato e trasformazione dei dati**  
Scopri come [passare dati tra stati con variabili](workflow-variables.md) e [Trasformare dati](transforming-data.md) con. JSONata

I `InputPath` `ResultSelector` campi `Parameters` e forniscono un modo per manipolare JSON durante il flusso di lavoro. `InputPath`può limitare l'input passato filtrando la notazione JSON utilizzando un percorso (vedi). [Utilizzo dei JSONPath percorsi](amazon-states-language-paths.md) Con il `Parameters` campo, è possibile passare una raccolta di coppie chiave-valore, utilizzando valori statici o selezioni dall'input utilizzando un percorso.

 Il `ResultSelector` campo fornisce un modo per manipolare il risultato dello stato prima che venga applicato. `ResultPath` 

AWS Step Functionsapplica prima il `InputPath` campo e poi il `Parameters` campo. Innanzitutto puoi filtrare l'input grezzo in modo da avere la selezione che desideri utilizzando `InputPath` e quindi applicare `Parameters` per manipolare ulteriormente l'input o aggiungere nuovi valori. È quindi possibile utilizzare il `ResultSelector` campo per manipolare l'output dello stato prima che `ResultPath` venga applicato.

## InputPath
<a name="input-output-inputpath"></a>

Utilizza `InputPath` per selezionare una parte dell'input dello stato. 

Se, ad esempio, l'input per il tuo stato include quanto segue:

```
{
  "comment": "Example for InputPath.",
  "dataset1": {
    "val1": 1,
    "val2": 2,
    "val3": 3
  },
  "dataset2": {
    "val1": "a",
    "val2": "b",
    "val3": "c"
  }
}
```

Puoi applicare l'`InputPath`.

```
"InputPath": "$.dataset2",
```

Con il precedente `InputPath`, il JSON trasmesso come input è il seguente.

```
{
  "val1": "a",
  "val2": "b",
  "val3": "c"
}
```

**Nota**  
Un percorso può produrre una selezione di valori. Analizza l’esempio seguente.  

```
{ "a": [1, 2, 3, 4] }
```
Se applichi il percorso `$.a[0:2]`, il risultato è il seguente.  

```
[ 1, 2 ]
```

## Parameters
<a name="input-output-parameters"></a>

Questa sezione descrive i diversi modi in cui è possibile utilizzare il campo Parametri. 

### Coppie chiave/valore
<a name="input-output-parameters-keyvalue"></a>

Utilizzate il `Parameters` campo per creare una raccolta di coppie chiave-valore che vengono passate come input. I valori di ciascuno possono essere valori statici da includere nella definizione della macchina a stati o selezionati dall'input o dall'oggetto Context con un percorso. Nel caso delle coppie chiave-valore in cui il valore viene selezionato mediante un percorso, il nome della chiave deve terminare con `.$`. 

Ad esempio, supponiamo di fornire il seguente input. 

```
{
  "comment": "Example for Parameters.",
  "product": {
    "details": {
       "color": "blue",
       "size": "small",
       "material": "cotton"
    },
    "availability": "in stock",
    "sku": "2317",
    "cost": "$23"
  }
}
```

Per selezionare alcune informazioni puoi specificare questi parametri nella definizione della tua macchina a stati. 

```
"Parameters": {
        "comment": "Selecting what I care about.",
        "MyDetails": {
          "size.$": "$.product.details.size",
          "exists.$": "$.product.availability",
          "StaticValue": "foo"
        }
      },
```

A partire dall'input e dal campo `Parameters` precedenti, questo è l'oggetto JSON che viene trasmesso.

```
{
  "comment": "Selecting what I care about.",
  "MyDetails": {
      "size": "small",
      "exists": "in stock",
      "StaticValue": "foo"
  }
},
```

Oltre all'input, è possibile accedere a uno speciale oggetto JSON, noto come oggetto Context. L'oggetto Context include informazioni sull'esecuzione della macchina a stati. Per informazioni, consulta [Accesso ai dati di esecuzione dall'oggetto Context in Step Functions](input-output-contextobject.md).

### Risorse connesse
<a name="input-output-parameters-connected"></a>

Il campo `Parameters` è inoltre in grado di trasmettere informazioni alle risorse connesse. Ad esempio, se lo stato dell'attività è l'orchestrazione di un AWS Batch lavoro, è possibile passare i parametri API pertinenti direttamente alle azioni API di quel servizio. Per ulteriori informazioni, consulta:
+ [Passaggio di parametri a un'API di servizio in Step Functions](connect-parameters.md)
+ [Integrazione dei servizi ](integrate-services.md)

### Simple Storage Service (Amazon S3)
<a name="input-output-parameters-s3"></a>

Se i dati della funzione Lambda che trasmetti tra gli stati potrebbero superare i 262.144 byte, ti consigliamo di utilizzare Amazon S3 per archiviare i dati e implementare uno dei seguenti metodi:
+ Utilizza lo *stato Distributed Map* nel tuo flusso di lavoro in modo che lo `Map` stato possa leggere l'input direttamente dalle fonti di dati Amazon S3. Per ulteriori informazioni, consulta [Modalità distribuita](state-map-distributed.md).
+ Analizza l'Amazon Resource Name (ARN) del bucket nel parametro per ottenere il nome `Payload` del bucket e il valore della chiave. Per ulteriori informazioni, consulta [Utilizzo di Amazon S3 ARNs anziché trasferire payload di grandi dimensioni in Step Functions](sfn-best-practices.md#avoid-exec-failures).

In alternativa, puoi modificare l'implementazione per trasferire payload più piccoli nelle tue esecuzioni.

## ResultSelector
<a name="input-output-resultselector"></a>

 Utilizzate il `ResultSelector` campo per manipolare il risultato di uno stato prima `ResultPath` che venga applicato. Il `ResultSelector` campo consente di creare una raccolta di coppie chiave-valore, in cui i valori sono statici o selezionati dal risultato dello stato. Utilizzando il `ResultSelector` campo, puoi scegliere quali parti del risultato di uno stato vuoi passare al `ResultPath` campo.

**Nota**  
Con il `ResultPath` campo, puoi aggiungere l'output del `ResultSelector` campo all'input originale.

`ResultSelector`è un campo opzionale nei seguenti stati:
+ [Stato del flusso di lavoro della mappa](state-map.md)
+ [Stato del flusso di lavoro delle attività](state-task.md)
+ [Stato del flusso di lavoro parallelo](state-parallel.md)

Ad esempio, le integrazioni del servizio Step Functions restituiscono metadati oltre al payload nel risultato. `ResultSelector`può selezionare parti del risultato e unirle allo stato di input con. `ResultPath` In questo esempio, vogliamo selezionare solo la `resourceType` e e `ClusterId` unirla con l'input di stato di un Amazon EMR CreateCluster.sync. Considerato quanto segue:

```
{
  "resourceType": "elasticmapreduce",
  "resource": "createCluster.sync",
  "output": {
    "SdkHttpMetadata": {
      "HttpHeaders": {
        "Content-Length": "1112",
        "Content-Type": "application/x-amz-JSON-1.1",
        "Date": "Mon, 25 Nov 2019 19:41:29 GMT",
        "x-amzn-RequestId": "1234-5678-9012"
      },
      "HttpStatusCode": 200
    },
    "SdkResponseMetadata": {
      "RequestId": "1234-5678-9012"
    },
    "ClusterId": "AKIAIOSFODNN7EXAMPLE"
  }
}
```

È quindi possibile selezionare `resourceType` e `ClusterId` utilizzare`ResultSelector`:

```
"Create Cluster": {
  "Type": "Task",
  "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
  "Parameters": {
    <some parameters>
  },
  "ResultSelector": {
    "ClusterId.$": "$.output.ClusterId",
    "ResourceType.$": "$.resourceType"
  },
  "ResultPath": "$.EMROutput",
  "Next": "Next Step"
}
```

Con l'input dato, l'utilizzo `ResultSelector` produce:

```
{
  "OtherDataFromInput": {},
  "EMROutput": {
      "ClusterId": "AKIAIOSFODNN7EXAMPLE",
      "ResourceType": "elasticmapreduce",
  }
}
```

### Appiattimento di una serie di array
<a name="flatten-array-of-arrays-result-selector"></a>

Se lo [Stato del flusso di lavoro della mappa](state-map.md) stato [Stato del flusso di lavoro parallelo](state-parallel.md) o nelle tue macchine a stati restituisce un array di array, puoi trasformarli in una matrice piatta con il campo. [ResultSelector](#input-output-resultselector) Puoi includere questo campo nella definizione dello stato Parallel o Map per manipolare il risultato di questi stati.

Per appiattire gli array, utilizzate la sintassi: `[*]` nel `ResultSelector` campo, come mostrato nell'esempio seguente.

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

Per esempi che mostrano come appiattire un array, consultate il *passaggio* 3 nei seguenti tutorial:
+ [Elaborazione di dati batch con una funzione Lambda in Step Functions](tutorial-itembatcher-param-task.md)
+ [Elaborazione di singoli articoli con una funzione Lambda in Step Functions](tutorial-itembatcher-single-item-process.md)