PostgreSQLLa base de données la plus sophistiquée au monde.

Version anglaise

9.15. Fonctions et opérateurs JSON

Tableau 9.40, « Opérateurs JSON » montre les opérateurs disponibles avec des données JSON (voir Section 8.14, « Type JSON »).

Tableau 9.40. Opérateurs JSON

Opérateur Type de l'opérande droit Description Exemple
-> int Obtient un élément du tableau JSON '[1,2,3]'::json->2
-> text Obtient un champ de l'objet JSON '{"a":1,"b":2}'::json->'b'
->> int Obtient un élément du tableau JSON sous sa forme textuelle '[1,2,3]'::json->>2
->> text Obtient un champ de l'objet JSON sous sa forme textuelle '{"a":1,"b":2}'::json->>'b'
#> tableau de text Obtient un objet JSON à partir du chemin spécifié '{"a":[1,2,3],"b":[4,5,6]}'::json#>'{a,2}'
#>> tableau de text Obtient un objet JSON sous sa forme textuelle, à partir du chemin spécifié '{"a":[1,2,3],"b":[4,5,6]}'::json#>>'{a,2}'

Tableau 9.41, « Fonctions de support JSON » montre les fonctions disponibles pour la création et la manipulation de données au format JSON (voir Section 8.14, « Type JSON »).

Tableau 9.41. Fonctions de support JSON

Fonction Code retour Description Exemple Exemple du résultat
array_to_json(anyarray [, pretty_bool]) json Renvoie le tableau au format JSON. Un tableau PostgreSQL multi-dimensionnel devient un tableau JSON de tableaux. Des retours à la ligne seront ajoutés entre les éléments de la première dimension si pretty_bool vaut true. array_to_json('{{1,5},{99,100}}'::int[]) [[1,5],[99,100]]
row_to_json(record [, pretty_bool]) json Renvoie la ligne au format JSON. Des retours à la ligne seront ajoutés entre les éléments du niveau 1 si pretty_bool vaut true. row_to_json(row(1,'foo')) {"f1":1,"f2":"foo"}
to_json(anyelement) json Renvoie la valeur en tant que JSON. Si le type de données n'est pas interne et qu'il existe une conversion du type vers json, la fonction de conversion sera utilisée pour réaliser la conversion. Dans les autres cas, pour toute valeur autre qu'un nombre, un booléen ou un NULL, la représentation textuelle sera utilisée, échappée et placée entre guillemets pour que ce soit du JSON légal. to_json('Fred said "Hi."'::text) "Fred said \"Hi.\""
json_array_length(json) int Renvoie le nombre d'éléments dans le tableau JSON extérieur. json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]') 5
json_each(json) SETOF key text, value json Étend l'objet JSON extérieur en un ensemble de paires clé/valeur. select * from json_each('{"a":"foo", "b":"bar"}')
 key | value
-----+-------
 a   | "foo"
 b   | "bar"
 
json_each_text(from_json json) SETOF key text, value text Étend l'objet JSON externe en un ensemble de paires clé/valeur. La valeur renvoyée est de type text. select * from json_each_text('{"a":"foo", "b":"bar"}')
 key | value
-----+-------
 a   | foo
 b   | bar
 
json_extract_path(from_json json, VARIADIC path_elems text[]) json Renvoie l'objet JSON pointé par path_elems. json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4') {"f5":99,"f6":"foo"}
json_extract_path_text(from_json json, VARIADIC path_elems text[]) text Renvoie l'objet JSON pointé par path_elems. json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4', 'f6') foo
json_object_keys(json) SETOF text Renvoie l'ensemble de clés de l'objet JSON. Seul l'objet « externe » sera affiché. json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}')
 json_object_keys
------------------
 f1
 f2
json_populate_record(base anyelement, from_json json, [, use_json_as_text bool=false] anyelement Étend l'objet from_json en une ligne dont les colonnes correspondent au type de l'enregistrement défini par base. La conversion fera de gros efforts. Les colonnes dans base sans clé correspondante dans from_json seront laissées NULL. Si une colonne est renseignée plus d'une fois, seule la dernière valeur est utilisée. select * from json_populate_record(null::x, '{"a":1,"b":2}')
 a | b
---+---
 1 | 2
json_populate_recordset(base anyelement, from_json json, [, use_json_as_text bool=false] SETOF anyelement Étend l'ensemble externe d'objets from_json en un ensemble dont les colonnes correspondent au type d'enregistrement défini par base. whose columns match the record type defined by base. La conversion fera de gros efforts. Les colonnes dans base sans clé correspondante dans from_json seront laissées NULL. Si une colonne est renseignée plus d'une fois, seule la dernière valeur est utilisée. select * from json_populate_recordset(null::x, '[{"a":1,"b":2},{"a":3,"b":4}]')
 a | b
---+---
 1 | 2
 3 | 4
 
json_array_elements(json) SETOF json Étend un tableau JSON en un ensemble d'éléments JSON. json_array_elements('[1,true, [2,false]]')
   value
-----------
 1
 true
 [2,false]

[Note]

Note

Les fonctions et opérateurs json peuvent imposer des pré-requis de validation plus stricts que les fonctions d'entrée du type. En particulier, ils vérifient beaucoup plus étroitement que toute utilisation de paires de substitution Unicode pour désigner les caractères Unicode en dehors de Unicode Basic Multilingual Plane est correct.

[Note]

Note

Beaucoup de ces fonctions et opérateurs convertiront les échappements Unicode du texte JSON dans le caractère UTF8 approprié sur l'encodage de la base est UTF8. Pour les autres encodages, la séquence d'échappement doit correspondre à un caractère ASCII, et tout autre point de code dans une séquence d'échappement Unicode se soldera par une erreur. En général, il est préférable d'éviter de mixer les échappements Unicode dans JSON avec un encodage de la base autre qu'UTF8 si possible.

[Note]

Note

L'extension hstore a une conversion de hstore vers json, pour que les valeurs hstore converties soient représentées sous leur forme d'objet JSON, et non pas sous leur forme textuelle.

Voir aussi Section 9.20, « Fonctions d'agrégat » sur la fonction d'agrégat json_agg qui agrège les valeurs des enregistrements en tant que valeurs JSON de façon très performante.