ValidationException: ExpressionAttributeValues contiene un valore non valido

TL;DR — Un valore in "ExpressionAttributeValues" è vuoto, ha un tipo non supportato oppure un ":placeholder" utilizzato nell'espressione non è mai stato definito. Controlla che ogni ":valore" sia presente e non vuoto.

Cosa significa

Messaggi comuni:

ValidationException: ExpressionAttributeValues contains invalid value: One or more parameter values were invalid: An AttributeValue may not contain an empty string for key :s
ValidationException: Value provided in ExpressionAttributeValues unused in expressions: keys: {:x}
ValidationException: An expression attribute value used in expression is not defined; attribute value: :v

Perché succede

  • Stringa vuota/binario vuoto — storicamente DynamoDB rifiutato "". Le stringhe vuote _sono ora consentite per attributi non chiave (e elenchi/mappe vuoti vanno bene), ma i valori vuoti negli attributi chiave e i Set vuoti non sono ancora validi.
  • Segnaposto non definito: la tua espressione fa riferimento a :v ma ExpressionAttributeValues non ha :v.
  • Segnaposto non utilizzato: hai definito :x ma nessuna espressione lo utilizza (DynamoDB rifiuta l'intera richiesta).
  • Tipo sbagliato — passaggio di un oggetto JS grezzo/undefinito/NaN o (con il client di basso livello) il wrapper {S}/{N} sbagliato.
  • Un insieme vuoto passato a un'operazione ADD/DELETE — queste clausole accettano un insieme di operandi (o, per ADD, un numero) e un insieme non può mai essere vuoto.

Come risolverlo

  1. Ogni :value nell'espressione deve essere definito in ExpressionAttributeValues e ogni valore definito deve essere utilizzato: mantieni i due perfettamente sincronizzati.
  2. Guardatevi da vuoti/undefiniti. Non passate :v quando l'origine è undefinita; eliminare invece la clausola. Per i set, assicurati che ci sia almeno un membro.
  3. Utilizza Document Client (@aws-sdk/lib-dynamodb) in modo che i valori JS nativi vengano sottoposti a marshalling per te: rimuove la maggior parte degli errori di wrapper del tipo.
  4. Verifica la mappa rispetto alla stringa dell'espressione. Stampa entrambi fianco a fianco prima della chiamata: ogni :token nell'espressione deve apparire come una chiave in "ExpressionAttributeValues" e ogni chiave nella mappa deve apparire nell'espressione.
  5. Per client di basso livello, convalidare i tipi di collegamento. Un set vuoto {SS: []} o un wrapper di tipo mancante su un attributo chiave continua a non funzionare anche quando il segnaposto è definito.

Esempio

import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
import {DynamoDBDocumentClient, UpdateCommand} from '@aws-sdk/lib-dynamodb';

const doc = DynamoDBDocumentClient.from(new DynamoDBClient({}));

const email = getEmail(); // could be undefined
const names = {'#e': 'email'};
const values = {':e': email};

if (email == null) throw new Error('email required'); // don't send :e = undefined

await doc.send(
  new UpdateCommand({
    TableName: 'Users',
    Key: {pk: 'USER#1'},
    UpdateExpression: 'SET #e = :e',
    ExpressionAttributeNames: names,
    ExpressionAttributeValues: values
  })
);

Percorso in DynoTable

L'editor di aggiornamento di DynoTable associa i valori durante la digitazione e rifiuta i segnaposto vuoti prima che la richiesta lasci il computer. Apri l'elemento con ⌘K, modifica un campo e controlla la mappa ExpressionAttributeValues generata nell'anteprima della richiesta: le mancate corrispondenze vengono visualizzate immediatamente anziché come 400 in CloudWatch.

Per il codice SDK che non puoi eseguire in linea, incolla l'espressione nel Generatore di espressioni e confronta la sua mappa :value con la tua. Cambia profilo con ⌘P per eseguire il test rispetto alla stessa tabella che ha generato l'errore; Verifica connessione in Impostazioni → Profili conferma le credenziali e la regione. Configurazione: Connetti a AWS, Installa. Set vuoti e valori JS non definiti sono le cause più comuni: proteggili entrambi prima che la chiamata lasci il processo.

Fonti

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.