Tous les produits
Search
Centre de documentation

Tair (Redis® OSS-Compatible):Doc

Dernière mise à jour :Aug 10, 2026

TairDoc est une structure de données documentaire similaire à RedisJSON. Utilisez-la pour stocker, interroger et manipuler des documents JSON avec une prise en charge complète des opérations CRUD (création, lecture, mise à jour, suppression).

Fonctionnalités clés :

  • Prise en charge complète du standard JSON

  • Prise en charge de JSONPath (RFC draft-4) via JSON.GET ; les sélecteurs spécifiques, notamment les sélecteurs génériques par point, d'index et de filtre, nécessitent la version 1.8.4 ou ultérieure

  • Prise en charge complète de la syntaxe JSON Pointer (RFC 6901)

  • Stockage sous forme d'arbre binaire pour une récupération efficace des éléments enfants

  • Conversion JSON vers XML et JSON vers YAML via JSON.GET

Notes de version :

  1. TairDoc a été lancé avec les instances Tair optimisées pour la mémoire. Il prend en charge la syntaxe JSONPointer complète et une partie de la syntaxe JSONPath (seule JSON.GET prend en charge la syntaxe JSONPath).

  2. Le 17 mai 2022, TairDoc V1.8.4 a été publié avec une prise en charge complète de JSONPath pour JSON.GET, incluant le sélecteur générique par point, le sélecteur d'index et le sélecteur de filtre. Nous vous recommandons de mettre à jour la version mineure de votre instance vers la version 1.8.4 ou ultérieure.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une instance Tair basée sur DRAM

  • Version mineure de l'instance 1.8.4 ou ultérieure (requise pour la prise en charge complète de JSONPath via JSON.GET)

Pour mettre à jour votre instance vers la dernière version mineure, consultez la rubrique Mettre à jour la version mineure d'une instance.

Pour les instances en cluster ou avec répartition lecture/écriture, mettez à jour les nœuds proxy vers la dernière version mineure afin de garantir le bon fonctionnement de toutes les commandes.

Liste des commandes

Commande Description Complexité temporelle
JSON.SET Crée une clé TairDoc ou met à jour un élément JSON à un chemin donné O(N)
JSON.GET Récupère un élément JSON à partir d'un chemin donné O(N)
JSON.DEL Supprime un élément JSON ou une clé O(N)
JSON.TYPE Obtient le type d'un élément JSON O(N)
JSON.MERGE Fusionne une valeur JSON dans un chemin donné O(N)
JSON.NUMINCRBY Incrémente un élément JSON numérique O(N)
JSON.STRAPPEND Ajoute une chaîne à la fin d'un élément de chaîne JSON O(N)
JSON.STRLEN Obtient la longueur d'un élément de chaîne JSON O(N)
JSON.ARRAPPEND Ajoute des éléments à la fin d'un tableau O(M×N)
JSON.ARRPOP Supprime et renvoie un élément d'un tableau O(M×N)
JSON.ARRINSERT Insère des éléments avant un index donné dans un tableau O(M×N)
JSON.ARRLEN Obtient la longueur d'un tableau O(N)
JSON.ARRTRIM Tronque un tableau à une plage spécifiée O(N)
DEL Supprime une ou plusieurs clés TairDoc (commande Redis native)

Conventions de syntaxe utilisées dans cette référence :

  • MAJUSCULES : mot-clé de commande

  • _italique_ : variable

  • [option] : paramètre facultatif

  • A | B : options mutuellement exclusives

  • ... : le paramètre peut être répété

JSON.SET

Syntaxe : JSON.SET clé chemin json [NX | XX]

Crée une clé TairDoc et stocke un élément JSON au chemin spécifié. Si la clé et le chemin existent déjà, met à jour l'élément.

Paramètres :

Paramètre Description
key La clé TairDoc
path Chemin au sein de la clé. Utilisez . ou $ pour la racine
json L'élément JSON à stocker
NX Écrit uniquement si le chemin n'existe pas
XX Écrit uniquement si le chemin existe déjà

Valeurs de retour :

Résultat Valeur de retour
Succès OK
XX spécifié mais le chemin n'existe pas nil
NX spécifié mais le chemin existe déjà nil
Chemin invalide ERR could not find object to add, please check path

Exemple — créer un document JSON :

La commande suivante crée une clé doc au chemin racine ($) et stocke un document de librairie contenant quatre livres et un vélo :

JSON.SET doc $ '{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } } }'

Sortie attendue :

OK

JSON.GET

Syntaxe : JSON.GET clé chemin [FORMAT XML | YAML] [ROOTNAME racine] [ARRNAME tab]

Récupère l'élément JSON au chemin spécifié. Prend en charge les syntaxes JSONPath et JSON Pointer.

Paramètres :

Paramètre Description
key La clé TairDoc
path Chemin au sein de la clé. Accepte la syntaxe JSONPath (style $) et JSON Pointer (style .)
FORMAT Format de sortie : XML ou YAML. Si omis, renvoie du JSON
ROOTNAME Nom de balise pour l'élément racine en sortie XML. Valide uniquement lorsque FORMAT XML est défini
ARRNAME Nom de balise pour les éléments de tableau en sortie XML. Valide uniquement lorsque FORMAT XML est défini

Valeurs de retour :

Résultat Valeur de retour
Succès L'élément JSON au chemin spécifié
Erreur Message d'erreur

Exemple — récupérer un document au format XML :

Tout d'abord, créez le document :

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Ensuite, récupérez-le au format XML, en spécifiant ROOT comme nom de balise racine et ARR comme nom de balise de tableau :

JSON.GET doc . FORMAT XML ROOTNAME ROOT ARRNAME ARR

Sortie attendue :

"<?xml version=\"1.0\" encoding=\"UTF-8\"?><ROOT><foo>bar</foo><baz>42</baz></ROOT>"

JSON.DEL

Syntaxe : JSON.DEL clé chemin

Supprime l'élément JSON au chemin spécifié. Si aucun chemin n'est indiqué, supprime la clé entière. Ne fait rien silencieusement si la clé ou le chemin n'existe pas.

Paramètres :

Paramètre Description
key La clé TairDoc
path Chemin de l'élément à supprimer. Si omis, la clé entière est supprimée

Valeurs de retour :

Résultat Valeur de retour
Succès 1
Clé ou chemin introuvable 0

Exemple — supprimer un champ :

Tout d'abord, créez le document :

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Supprimez le champ foo :

JSON.DEL doc .foo

Sortie attendue — 1 indique que l'élément a été supprimé :

(integer) 1

JSON.TYPE

Syntaxe : JSON.TYPE key path

Renvoie le type de l'élément JSON situé au chemin spécifié.

Paramètres :

Paramètre Description
key La clé TairDoc
path Chemin de l'élément

Valeurs de retour :

Résultat Valeur de retour
Succès L'une des valeurs suivantes : boolean, string, number, array, object, raw, reference, const, null
Échec 0
Clé ou chemin introuvable nil

Exemple — obtenir le type d'un champ :

Commencez par créer le document :

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Obtenez le type du champ foo ("bar" est une chaîne de caractères) :

JSON.TYPE doc .foo

Sortie attendue :

string

JSON.MERGE

Syntaxe : JSON.MERGE key path value

Fusionne une valeur JSON dans le chemin spécifié. Cette commande permet d'ajouter de nouvelles valeurs, de mettre à jour des valeurs existantes et de supprimer des valeurs au niveau du chemin indiqué.

Paramètres :

Paramètre Description
key La clé TairDoc
path Chemin cible pour la fusion. Prend en charge une syntaxe JSONPath partielle (par exemple, $.a.b.c, $.a['b']). N'accepte pas les expressions de descente récursive ($..) ni les jokers ($*)
value La valeur JSON à fusionner. Compatible avec le JSON Merge Patch (RFC 7386)

Valeurs de retour :

Résultat Valeur de retour
Succès OK
Valeur invalide Erreur (échec de l'analyse du correctif de fusion)

Exemple — ajouter, mettre à jour et supprimer des valeurs en une seule opération :

Commencez par créer le document :

JSON.SET doc $ '{"f1": {"a":1}, "f2":{"a":2}}'

Fusionnez les modifications : définissez f1 sur null (ce qui le supprime), mettez à jour f2.a et ajoutez f2.b, puis ajoutez un nouveau tableau f3 :

JSON.MERGE doc $ '{"f1": null, "f2":{"a":3, "b":4}, "f3":[2,4,6]}'

Sortie attendue :

OK

Vérifiez le résultat avec JSON.GET doc .. La clé f1 est supprimée, car définir un champ sur null dans un correctif de fusion entraîne sa suppression :

"{\"f2\":{\"a\":3,\"b\":4},\"f3\":[2,4,6]}"

JSON.NUMINCRBY

Syntaxe : JSON.NUMINCRBY key path value

Incrémente l'élément JSON numérique situé au chemin spécifié. L'élément existant et la valeur d'incrément doivent être du même type, soit entier, soit double.

Paramètres :

Paramètre Description
key La clé TairDoc
path Chemin de l'élément numérique
value Montant à ajouter

Valeurs de retour :

Résultat Valeur de retour
Succès Nouvelle valeur après incrémentation
Clé ou chemin introuvable Erreur

Exemple — incrémenter un champ numérique :

Commencez par créer le document :

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Incrémentez baz de 10 (42 + 10 = 52) :

JSON.NUMINCRBY doc .baz 10

Sortie attendue :

"52"

JSON.STRAPPEND

Syntaxe : JSON.STRAPPEND key path json-string

Ajoute une chaîne à l'élément de chaîne JSON situé au chemin spécifié. L'élément existant et la valeur ajoutée doivent tous deux être de type string.

Paramètres :

Paramètre Description
key La clé TairDoc
path Chemin de l'élément de chaîne
json-string Chaîne à ajouter

Valeurs de retour :

Résultat Valeur de retour
Succès Nouvelle longueur de la chaîne
Clé introuvable -1

Exemple — ajouter du texte à un champ de chaîne :

Commencez par créer le document :

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Ajoutez rrrrr à foo : "bar" devient "barrrrrr", soit 8 caractères :

JSON.STRAPPEND doc .foo rrrrr

Sortie attendue :

(integer) 8

JSON.STRLEN

Syntaxe : JSON.STRLEN key path

Renvoie la longueur en caractères de l'élément de chaîne JSON situé au chemin spécifié. L'élément doit être de type string.

Paramètres :

Paramètre Description
key La clé TairDoc
path Chemin de l'élément de chaîne

Valeurs de retour :

Résultat Valeur de retour
Succès Longueur de la chaîne
Clé introuvable -1

Exemple — obtenir la longueur d'un champ de chaîne :

Commencez par créer le document :

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Obtenez la longueur de foo : "bar" contient 3 caractères :

JSON.STRLEN doc .foo

Sortie attendue :

(integer) 3

JSON.ARRAPPEND

Syntaxe : JSON.ARRAPPEND key path json [json ...]

Ajoute un ou plusieurs éléments JSON à la fin d'un tableau. La complexité temporelle est de O(M×N), où M représente le nombre d'éléments à ajouter et N la longueur actuelle du tableau.

Paramètres :

Paramètre Description
key La clé TairDoc
path Chemin du tableau
json Un ou plusieurs éléments JSON à ajouter

Valeurs de retour :

Résultat Valeur de retour
Succès Nouvelle longueur du tableau
Clé introuvable -1

Exemple — ajouter plusieurs éléments à un tableau :

Commencez par créer le document :

JSON.SET doc . '{"id": [1,2,3]}'

Ajoutez null, false et true au tableau id. Le tableau passe de 3 à 6 éléments :

JSON.ARRAPPEND doc .id null false true

Sortie attendue :

(integer) 6

JSON.ARRPOP

Syntaxe : JSON.ARRPOP key path [index]

Supprime et renvoie l'élément situé à l'index spécifié dans un tableau. La complexité temporelle est de O(M×N), où M représente le nombre d'éléments enfants dans la clé et N la longueur du tableau.

Paramètres :

Paramètre Description
key La clé TairDoc
path Chemin du tableau
index Index de l'élément à supprimer. Commence à 0 ; les valeurs négatives comptent à partir de la fin. Si omis, la valeur par défaut est le dernier élément

Valeurs de retour :

Résultat Valeur de retour
Succès Élément supprimé
Tableau vide ERR array index outflow

Exemple — supprimer le premier élément d'un tableau :

Commencez par créer le document :

JSON.SET doc . '{"id": [1,2,3]}'

Supprimez et renvoyez l'élément à l'index 0 (le premier élément, 1) :

JSON.ARRPOP doc .id 0

Sortie attendue :

"1"

JSON.ARRINSERT

Syntaxe : JSON.ARRINSERT key path [index] json [json ...]

Insère un ou plusieurs éléments JSON dans un tableau avant l'index spécifié. La complexité temporelle est de O(M×N), où M représente le nombre d'éléments à insérer et N la longueur actuelle du tableau.

Paramètres :

Paramètre description
key Clé TairDoc
path Chemin d'accès du tableau
index Position avant laquelle l'insertion doit avoir lieu. Commence à 0 ; les valeurs négatives sont comptées à partir de la fin. Si ce paramètre est omis, la dernière position est utilisée par défaut
json Un ou plusieurs éléments JSON à insérer

Valeurs de retour :

Résultat Valeur de retour
Succès Nouvelle longueur du tableau
Le tableau est vide ERR array index outflow

Exemple : insertion d'éléments au début d'un tableau

Commencez par créer le document :

JSON.SET doc . '{"id": [1,2,3]}'

Insérez 10 et 15 avant l'index 0. Le tableau résultant est [10, 15, 1, 2, 3] :

JSON.ARRINSERT doc .id 0 10 15

Sortie attendue :

(integer) 5

JSON.ARRLEN

Syntaxe : JSON.ARRLEN key path

Renvoie le nombre d'éléments contenus dans un tableau.

Paramètres :

Paramètre description
key Clé TairDoc
path Chemin d'accès du tableau

Valeurs de retour :

Résultat Valeur de retour
Succès Longueur du tableau
Clé introuvable -1

Exemple : obtention de la longueur d'un tableau

Commencez par créer le document :

JSON.SET doc . '{"id": [1,2,3]}'

Obtenez le nombre d'éléments du tableau id :

JSON.ARRLEN doc .id

Sortie attendue :

(integer) 3

JSON.ARRTRIM

Syntaxe : JSON.ARRTRIM key path start stop

Découpe un tableau afin de ne conserver que les éléments situés dans la plage [start, stop] (bornes incluses). Tous les éléments extérieurs à cette plage sont supprimés.

Paramètres :

Paramètre description
key Clé TairDoc
path Chemin d'accès du tableau
start Index de début (base 0, inclus)
stop Index de fin (base 0, inclus)

Valeurs de retour :

Résultat Valeur de retour
Succès Longueur du tableau après découpage
Clé introuvable -1

Exemple : découpage d'un tableau vers une sous-plage

Commencez par créer le document :

JSON.SET doc . '{"id": [1,2,3,4,5,6]}'

Découpez le tableau pour ne conserver que les éléments aux index 3 et 4 (valeurs 4 et 5). Les éléments situés en dehors de cette plage sont ignorés :

JSON.ARRTRIM doc .id 3 4

Sortie attendue — 2 éléments restent :

(integer) 2

JSONPath

La commande JSON.GET prend en charge la syntaxe du projet de norme JSONPath RFC draft-4 pour des requêtes flexibles. La prise en charge complète de JSONPath nécessite la version 1.8.4 ou ultérieure.

Sélecteurs pris en charge :

Sélecteur Description
$ Élément racine
@ Élément courant
.name Élément enfant
.. Éléments descendants
* Caractère générique — tous les éléments enfants ou éléments de tableau
[ ] Index de tableau (indice de base 0) ; prend en charge les listes ([0,1]) et les noms d'éléments (['name'])
[start:end:step] Sélecteur de tranche de tableau
?... Sélecteur de filtre
() Expression ; priorité des opérateurs : `( ) > && > \ \ `

Exemples de requête :

Les exemples suivants utilisent ce document de librairie. Créez-le d'abord :

JSON.SET dockey $
'{
    "store": {
        "book": [{
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}'

Résultat attendu :

OK

Sélecteur racine

Interrogez l'intégralité de l'objet JSON :

JSON.GET dockey $

Résultat attendu :

"[{"store":{"book":[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],"bicycle":{"color":"red","price":19.95}}}]"

Sélecteur par point

Interrogez tous les champs du vélo :

JSON.GET dockey $.store.bicycle.*

Résultat attendu :

"["red",19.95]"

Interrogez le prix du vélo :

JSON.GET dockey $.store.bicycle.price

Résultat attendu :

"[19.95]"

Sélecteur d'index

Interrogez tous les champs du premier livre :

JSON.GET dockey $.store.book[0]

Résultat attendu :

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95}]"

Interrogez les titres de tous les livres :

JSON.GET dockey "$.store.book[*]['title']"

Résultat attendu :

"["Sayings of the Century","Sword of Honour","Moby Dick","The Lord of the Rings"]"

Sélecteur de tranche de tableau

Interrogez les trois premiers livres à l'aide d'une tranche avec un pas de 1 :

JSON.GET dockey $.store.book[0:2:1]

Résultat attendu :

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]"

Sélecteur descendant

Interrogez tous les prix dans le magasin (livres et vélo) :

JSON.GET dockey $..price

Résultat attendu :

"[8.95,12.99,8.99,22.99,19.95]"

Sélecteur de liste

Interrogez le premier et le troisième livre :

JSON.GET dockey $.store.book[0,2]

Résultat attendu :

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]"

Sélecteur de filtre

Interrogez les livres qui possèdent un champ isbn :

JSON.GET dockey $.store.book[?(@.isbn)]

Résultat attendu :

"[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]"

Interrogez les livres dont le prix est inférieur à 10 :

JSON.GET dockey '$.store.book[?(@.price < 10)]'

Résultat attendu :

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]"

Interrogez les livres dont le prix est de 12,99, supérieur à 19,95, ou appartenant à la catégorie reference (expression combinée) :

JSON.GET dockey "$..book[?((@.price == 12.99 || @.price > $.store.bicycle.price) || @.category == 'reference')]"

Résultat attendu :

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]"

Pointeur JSON

TairDoc prend entièrement en charge la syntaxe JSON Pointer (RFC 6901). Utilisez des chemins délimités par / pour naviguer dans un document.

Exemple : récupération d'un élément de tableau imbriqué :

Commencez par créer le document :

JSON.SET doc . '{"foo": "bar", "baz" : [1,2,3]}'

Récupérez le premier élément du tableau baz à l'aide du chemin JSON Pointer /baz/0 :

JSON.GET doc /baz/0

Résultat attendu :

"1"