Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Présentation du type de données JSON

Mode de mise au point
Présentation du type de données JSON - Amazon MemoryDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

MemoryDB prend en charge un certain nombre de commandes Valkey et Redis OSS pour travailler avec le type de données JSON. Vous trouverez ci-dessous un aperçu du type de données JSON et une liste détaillée des commandes prises en charge.

Terminologie

Terme Description

Document JSON

fait référence à la valeur d'une clé JSON

Valeur JSON

fait référence à un sous-ensemble d'un document JSON, y compris la racine qui représente l'intégralité du document. Une valeur peut être un conteneur ou une entrée dans un conteneur

Élément JSON

équivalent à une valeur JSON

Norme JSON prise en charge

Le format JSON est conforme à la norme d'échange de données JSON RFC 7159 et ECMA-404. L'Unicode UTF-8 dans le texte JSON est pris en charge.

Élément racine

L'élément racine peut être de n'importe quel type de données JSON. Notez que dans la précédente RFC 4627, seuls les objets ou les tableaux étaient autorisés comme valeurs racine. Depuis la mise à jour vers la RFC 7159, la racine d'un document JSON peut être de n'importe quel type de données JSON.

Limite de taille du document

Les documents JSON sont stockés en interne dans un format optimisé pour un accès et une modification rapides. Ce format consomme généralement un peu plus de mémoire que la représentation sérialisée équivalente du même document. La consommation de mémoire par un seul document JSON est limitée à 64 Mo, ce qui correspond à la taille de la structure de données en mémoire, et non à la chaîne JSON. La quantité de mémoire consommée par un document JSON peut être inspectée à l'aide de la JSON.DEBUG MEMORY commande.

JSON ACLs

  • Le type de données JSON est entièrement intégré à la fonctionnalité des listes de contrôle d'accès (ACL) Valkey et Redis OSS. À l'instar des catégories existantes par type de données (@string, @hash, etc.), une nouvelle catégorie @json est ajoutée pour simplifier la gestion de l'accès aux commandes et aux données JSON. Aucune autre commande Valkey ou Redis OSS existante n'appartient à la catégorie @json. Toutes les commandes JSON appliquent les restrictions et autorisations des keyspaces ou des commandes.

  • Cinq catégories d'ACL existantes sont mises à jour pour inclure les nouvelles commandes JSON : @read, @write, @fast, @slow et @admin. Le tableau ci-dessous indique le mappage des commandes JSON vers les catégories appropriées.

ACL
Commande JSON @read @write @fast @slow @admin

JSON.ARRAPPEND

y

y

JSON.ARRINDEX

y

y

JSON.ARRINSERT

y

y

JSON.ARRLEN

y

y

JSON.ARRPOP

y

y

JSON.ARRTRIM

y

y

JSON.CLEAR

y

y

JSON.DEBUG

y

y

y

JSON.DEL

y

y

JSON.FORGET

y

y

JSON.GET

y

y

JSON.MGET

y

y

JSON.NUMINCRBY

y

y

JSON.NUMMULTBY

y

y

JSON.OBJKEYS

y

y

JSON.OBJLEN

y

y

JSON.RESP

y

y

JSON.SET

y

y

JSON.STRAPPEND

y

y

JSON.STRLEN

y

y

JSON.STRLEN

y

y

JSON.TOGGLE

y

y

JSON.TYPE

y

y

JSON.NUMINCRBY

y

y

Limite de profondeur d'imbrication

Lorsqu'un objet ou un tableau JSON possède un élément qui est lui-même un autre objet ou tableau JSON, cet objet ou tableau intérieur est dit « imbriqué » dans l'objet ou le tableau extérieur. La limite maximale de la profondeur d'imbrication est de 128. Toute tentative de création d'un document contenant une profondeur d'imbrication supérieure à 128 sera rejetée avec une erreur.

Syntaxe de commande

La plupart des commandes nécessitent un nom de clé Valkey ou Redis OSS comme premier argument. Certaines commandes ont également un argument path. L'argument path prend par défaut la racine s'il est facultatif et non fourni.

Notation :

  • Les arguments obligatoires sont placés entre crochets, par exemple <key>

  • Les arguments facultatifs sont placés entre crochets, par exemple [path]

  • Les arguments facultatifs supplémentaires sont indiqués par..., par exemple [json...]

Syntaxe de chemin

JSON pour Valkey et Redis OSS prend en charge deux types de syntaxes de chemin :

  • Syntaxe améliorée — Suit la JSONPath syntaxe décrite par Goessner, comme indiqué dans le tableau ci-dessous. Nous avons réorganisé et modifié les descriptions dans le tableau pour plus de clarté.

  • Syntaxe restreinte : possède des capacités de requête limitées.

Note

Les résultats de certaines commandes dépendent du type de syntaxe de chemin utilisé.

Si un chemin de requête commence par « $ », il utilise la syntaxe améliorée. Sinon, la syntaxe restreinte est utilisée.

Syntaxe améliorée

Symbole/Expression Description

$

l'élément racine

. ou []

enfant opérateur

..

descente récursive

*

joker. Tous les éléments d'un objet ou d'un tableau.

[]

opérateur d'indice de tableau. L'index est basé sur 0.

[,]

opérateur syndical

[start:end:step]

opérateur de tranche de tableau

?()

applique une expression de filtre (script) au tableau ou à l'objet en cours

()

expression du filtre

@

utilisé dans les expressions de filtre faisant référence au nœud en cours de traitement

==

égal à, utilisé dans les expressions de filtre.

!=

différent de, utilisé dans les expressions de filtre.

>

supérieur à, utilisé dans les expressions de filtre.

>=

supérieur ou égal à, utilisé dans les expressions de filtre.

<

inférieur à, utilisé dans les expressions de filtre.

<=

inférieur ou égal à, utilisé dans les expressions de filtre.

&&

ET logique, utilisé pour combiner plusieurs expressions de filtre.

||

OR logique, utilisé pour combiner plusieurs expressions de filtre.

Exemples

Les exemples ci-dessous sont basés sur les exemples de données XML de Goessner, que nous avons modifiés en ajoutant des champs supplémentaires.

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

$.store.book[*].author

les auteurs de tous les livres de la boutique

$..author

tous les auteurs

$.store.*

tous les membres de la boutique

$["store"].*

tous les membres de la boutique

$.store..price

le prix de tout ce qui se trouve dans le magasin

$..*

tous les membres récursifs de la structure JSON

$..book[*]

tous les livres

$..book[0]

le premier livre

$..book[-1]

le dernier livre

$..book[0:2]

les deux premiers livres

$..book[0,1]

les deux premiers livres

$..book[0:4]

livres de l'index 0 à 3 (l'index final n'est pas inclus)

$..book[0:4:2]

livres aux index 0, 2

$..book[?(@.isbn)]

tous les livres avec numéro ISBN

$..book[?(@.price<10)]

tous les livres à moins de 10$

'$..book[?(@.price < 10)]'

tous les livres moins chers que 10$. (Le chemin doit être entre guillemets s'il contient des espaces)

'$..book[?(@["price"] < 10)]'

tous les livres à moins de 10$

'$..book[?(@.["price"] < 10)]'

tous les livres à moins de 10$

$.. book [? (@.prix>=10&&@.prix<=100)]

tous les livres dans la fourchette de prix de 10$ à 100$, inclus

'$..book[?(@.price>=10 && @.price<=100)]'

tous les livres dont le prix varie de 10$ à 100$, inclus. (Le chemin doit être entre guillemets s'il contient des espaces)

$..book[?(@.sold==true||@.in-stock==false)]

tous les livres sont vendus ou en rupture de stock

'$..book[?(@.sold == true || @.in-stock == false)]'

tous les livres sont vendus ou sont en rupture de stock. (Le chemin doit être entre guillemets s'il contient des espaces)

'$.store.book[?(@.["category"] == "fiction")]'

tous les livres de la catégorie fiction

'$.store.book[?(@.["category"] != "fiction")]'

tous les livres dans les catégories non-fictionnelles

Autres exemples d'expressions de filtre :

127.0.0.1:6379> JSON.SET k1 . '{"books": [{"price":5,"sold":true,"in-stock":true,"title":"foo"}, {"price":15,"sold":false,"title":"abc"}]}' OK 127.0.0.1:6379> JSON.GET k1 $.books[?(@.price>1&&@.price<20&&@.in-stock)] "[{\"price\":5,\"sold\":true,\"in-stock\":true,\"title\":\"foo\"}]" 127.0.0.1:6379> JSON.GET k1 '$.books[?(@.price>1 && @.price<20 && @.in-stock)]' "[{\"price\":5,\"sold\":true,\"in-stock\":true,\"title\":\"foo\"}]" 127.0.0.1:6379> JSON.GET k1 '$.books[?((@.price>1 && @.price<20) && (@.sold==false))]' "[{\"price\":15,\"sold\":false,\"title\":\"abc\"}]" 127.0.0.1:6379> JSON.GET k1 '$.books[?(@.title == "abc")]' [{"price":15,"sold":false,"title":"abc"}] 127.0.0.1:6379> JSON.SET k2 . '[1,2,3,4,5]' 127.0.0.1:6379> JSON.GET k2 $.*.[?(@>2)] "[3,4,5]" 127.0.0.1:6379> JSON.GET k2 '$.*.[?(@ > 2)]' "[3,4,5]" 127.0.0.1:6379> JSON.SET k3 . '[true,false,true,false,null,1,2,3,4]' OK 127.0.0.1:6379> JSON.GET k3 $.*.[?(@==true)] "[true,true]" 127.0.0.1:6379> JSON.GET k3 '$.*.[?(@ == true)]' "[true,true]" 127.0.0.1:6379> JSON.GET k3 $.*.[?(@>1)] "[2,3,4]" 127.0.0.1:6379> JSON.GET k3 '$.*.[?(@ > 1)]' "[2,3,4]"

Syntaxe restreinte

Symbole/Expression Description

. ou []

enfant opérateur

[]

opérateur d'indice de tableau. L'index est basé sur 0.

Exemples

Chemin Description

.store.book[0].author

l'auteur du premier livre

.store.book[-1].author

l'auteur du dernier livre

.address.city

nom de la ville

["store"]["book"][0]["title"]

le titre du premier livre

["store"]["book"][-1]["title"]

le titre du dernier livre

Note

Tout le contenu de Goessner cité dans cette documentation est soumis à la licence Creative Commons.

Préfixes d'erreur courantes

Chaque message d'erreur possède un préfixe. Voici une liste des préfixes d'erreur courants :

Préfixe Description

ERR

une erreur générale

LIMIT

erreur de dépassement de la limite de taille. Par exemple, la limite de taille du document ou la limite de profondeur d'imbrication ont été dépassées

NONEXISTENT

une clé ou un chemin n'existe pas

OUTOFBOUNDARIES

index de tableau hors limites

SYNTAXERR

erreur de syntaxe

WRONGTYPE

type de valeur incorrect

Métriques liées au JSON

Les métriques d'informations JSON suivantes sont fournies :

Infos Description

json_total_memory_bytes

mémoire totale allouée aux objets JSON

json_num_documents

nombre total de documents dans le moteur Valkey ou Redis OSS

Pour interroger les métriques de base, exécutez la commande suivante :

info json_core_metrics

Comment MemoryDB interagit avec JSON

Ce qui suit illustre comment MemoryDB interagit avec le type de données JSON.

Priorité des opérateurs

Lors de l'évaluation d'expressions conditionnelles pour le filtrage, les && sont prioritaires, puis les || sont évalués, comme c'est le cas dans la plupart des langages. Les opérations entre parenthèses seront exécutées en premier.

Comportement de la limite maximale d'imbrication des chemins

La limite maximale d'imbrication de chemins de MemoryDB est de 128. Ainsi, une valeur comme $.a.b.c.d... ne peut atteindre que 128 niveaux.

Traitement des valeurs numériques

Le JSON ne dispose pas de types de données distincts pour les nombres entiers et les nombres à virgule flottante. Ils sont tous appelés des nombres.

Lorsqu'un numéro JSON est reçu, il est stocké dans l'un des deux formats suivants. Si le nombre correspond à un entier signé de 64 bits, il est converti dans ce format ; dans le cas contraire, il est stocké sous forme de chaîne. Les opérations arithmétiques sur deux nombres JSON (par exemple JSON.NUMINCRBY et JSON.NUMMULTBY) tentent de préserver le plus de précision possible. Si les deux opérandes et la valeur résultante correspondent à un entier signé de 64 bits, l'arithmétique des entiers est effectuée. Sinon, les opérandes d'entrée sont convertis en nombres à virgule flottante IEEE à double précision 64 bits, l'opération arithmétique est effectuée et le résultat est reconverti en chaîne.

Commandes arithmétiques NUMINCRBY et NUMMULTBY :

  • Si les deux nombres sont des entiers et que le résultat est hors de la plage de int64, il deviendra automatiquement un nombre à virgule flottante à double précision.

  • Si au moins l'un des nombres est un nombre à virgule flottante, le résultat sera un nombre à virgule flottante à double précision.

  • Si le résultat dépasse la plage de deux, la commande renvoie une OVERFLOW erreur.

Note

Avant la version 6.2.6.R2 du moteur Redis OSS, lorsqu'un numéro JSON était reçu en entrée, il était converti en l'une des deux représentations binaires internes : un entier signé de 64 bits ou un nombre à virgule flottante IEEE à double précision de 64 bits. La chaîne de caractères d'origine et toute sa mise en forme ne sont pas retenues. Ainsi, lorsqu'un nombre est généré en sortie dans le cadre d'une réponse JSON, il est converti de la représentation binaire interne en une chaîne imprimable qui utilise des règles de formatage génériques. Ces règles peuvent entraîner la génération d'une chaîne différente de celle qui a été reçue.

  • Si les deux nombres sont des entiers et que le résultat est hors de la plage de int64, il devient automatiquement un nombre à virgule flottante IEEE à double précision de 64 bits.

  • Si au moins un des nombres est un nombre à virgule flottante, le résultat est un nombre à virgule flottante IEEE à double précision de 64 bits.

  • Si le résultat dépasse la plage du double IEEE de 64 bits, la commande renvoie une erreur OVERFLOW.

Pour une liste détaillée des commandes disponibles, consultez Commandes prises en charge.

Évaluation stricte de la syntaxe

MemoryDB n'autorise pas les chemins JSON dont la syntaxe est invalide, même si un sous-ensemble du chemin contient un chemin valide. Ceci afin de maintenir un comportement correct pour nos clients.

Rubrique suivante :

Commandes prises en charge

Rubrique précédente :

Mise en route avec JSON
ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.