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à.
Estrarre JSON dati dalle stringhe
Potresti avere dati di origine JSON contenenti stringhe con codifica che non vuoi necessariamente deserializzare in una tabella in Athena. In questo caso, puoi comunque eseguire SQL operazioni su questi dati utilizzando le funzioni disponibili in Presto. JSON
Considerate questa JSON stringa come un set di dati di esempio.
{"name": "Susan Smith",
"org": "engineering",
"projects":
[
{"name":"project1", "completed":false},
{"name":"project2", "completed":true}
]
}
Esempi: proprietà di estrazione
Per estrarre le projects
proprietà name
and dalla JSON stringa, utilizzate la json_extract
funzione come nell'esempio seguente. La json_extract
funzione prende la colonna contenente la JSON stringa e la cerca utilizzando un'espressione JSONPath
simile a -like con notazione a punti.
.
Nota
JSONPath
esegue un attraversamento semplice della struttura. Utilizza il $
segno per indicare la radice del JSON documento, seguito da un punto e da un elemento annidato direttamente sotto la radice, ad esempio. $.name
WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false}, {"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract(myblob, '$.name') AS name, json_extract(myblob, '$.projects') AS projects FROM dataset
Il valore restituito è una stringa JSON con codifica e non un tipo di dati Athena nativo.
+-----------------------------------------------------------------------------------------------+
| name | projects |
+-----------------------------------------------------------------------------------------------+
| "Susan Smith" | [{"name":"project1","completed":false},{"name":"project2","completed":true}] |
+-----------------------------------------------------------------------------------------------+
Per estrarre il valore scalare dalla JSON stringa, usa la funzione. json_extract_scalar
Quest'ultima è simile a json_extract
, ma restituisce solo valori scalari (booleani, numeri o stringhe).
Nota
Non utilizzare la funzione json_extract_scalar
su matrici, mappe o strutture.
WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract_scalar(myblob, '$.name') AS name, json_extract_scalar(myblob, '$.projects') AS projects FROM dataset
Questa query restituisce:
+---------------------------+
| name | projects |
+---------------------------+
| Susan Smith | |
+---------------------------+
Per ottenere il primo elemento della proprietà projects
nella matrice di esempio, utilizza la funzione json_array_get
e specifica la posizione indice.
WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_array_get(json_extract(myblob, '$.projects'), 0) AS item FROM dataset
Restituisce il valore nella posizione di indice specificata nell'array JSON -encoded.
+---------------------------------------+
| item |
+---------------------------------------+
| {"name":"project1","completed":false} |
+---------------------------------------+
Per restituire un tipo di stringa Athena, utilizza l'operatore []
all'interno di un'espressione JSONPath
, quindi utilizza la funzione json_extract_scalar
. Per ulteriori informazioni su []
, consulta Accedi agli elementi dell'array.
WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract_scalar(myblob, '$.projects[0].name') AS project_name FROM dataset
Tale operazione restituisce questo risultato:
+--------------+
| project_name |
+--------------+
| project1 |
+--------------+