Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Información general del tipo de datos JSON

Modo de enfoque
Información general del tipo de datos JSON - Amazon MemoryDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

MemoryDB admite una serie de comandos de Valkey y Redis OSS para trabajar con el tipo de datos JSON. A continuación se presenta información general del tipo de datos JSON y una lista detallada de los comandos compatibles.

Terminología

Plazo Descripción

Documento JSON

hace referencia al valor de una clave JSON

Valor JSON

hace referencia a un subconjunto de un JSON, incluida la raíz que representa a todo el documento. Un valor podría ser un contenedor o una entrada dentro de un contenedor

Elemento JSON

equivalente al valor JSON.

Estándares JSON admitidos

El formato JSON es compatible con el estándar de intercambio de datos JSON RFC 7159 y ECMA-404. Se admite UTF-8 Unicode en texto JSON.

Elemento raíz

El elemento raíz puede ser de cualquier tipos de datos de JSON. Tenga en cuenta que en la RFC 4627 anterior, solo se permitían objetos o matrices como valores raíz. Desde la actualización a RFC 7159, la raíz de un documento JSON puede ser de cualquier tipo de datos JSON.

Límite de tamaño del documento

Los documentos JSON se almacenan de manera interna en un formato que se optimiza para lograr un acceso y modificación rápidos. Este formato suele consumir algo más de memoria que la representación serializada equivalente del mismo documento. El consumo de memoria de un solo documento JSON está limitado a 64 MB, que es el tamaño de la estructura de datos en memoria, no la cadena JSON. La cantidad de memoria que consume un documento JSON puede examinarse mediante el uso del comando JSON.DEBUG MEMORY.

JSON ACLs

  • El tipo de datos JSON está totalmente integrado en la capacidad Lista de control de acceso (ACL) de Valkey y Redis OSS. Similar a las categorías existentes por tipo de datos (@string, @hash, etc.), se agrega una nueva categoría @json para simplificar la administración del acceso a los comandos y datos JSON. Ningún otro comando de Valkey o Redis OSS existente es miembro de la categoría @json. Todos los comandos JSON aplican cualquier restricción y permiso de espacio de teclas o comandos.

  • Hay cinco categorías de ACL existentes que se actualizan para incluir los nuevos comandos JSON: @read, @write, @fast, @slow y @admin. La tabla a continuación indica la asignación de los comandos JSON a las categorías apropiadas.

ACL
Comando 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

Límite de profundidad de anidado

Cuando un objeto o matriz JSON tiene un elemento que es otro objeto o matriz JSON, se dice que ese objeto o matriz interior se “anida” dentro del objeto o matriz exterior. El límite máximo de profundidad de anidamiento es 128. Cualquier intento de crear un documento que contenga una profundidad de anidamiento superior a 128 se rechazará con un error.

Sintaxis de comandos

La mayoría de los comandos requieren un nombre de clave de Valkey o Redis OSS como primer argumento. Algunos comandos también tienen un argumento ruta. El argumento de ruta se establece de manera predeterminada en la raíz si es opcional y no se proporciona.

Notación:

  • Los argumentos obligatorios se incluyen entre corchetes angulares, ej. <clave>

  • Los argumentos opcionales deben ir entre corchetes, ej. [ruta]

  • Los argumentos opcionales adicionales se indican con..., por ejemplo, [json...]

Sintaxis de ruta

JSON para Valkey y Redis OSS admite dos tipos de sintaxis de ruta:

  • Sintaxis mejorada: sigue la JSONPath sintaxis descrita por Goessner, como se muestra en la siguiente tabla. Hemos reordenado y modificado las descripciones de la tabla para mayor claridad.

  • Sintaxis restringida: tiene capacidades de consulta limitadas.

nota

Los resultados de algunos comandos son sensibles al tipo de sintaxis de ruta que se utiliza.

Si una ruta de consulta comienza por '$', utiliza la sintaxis mejorada. De lo contrario, se utiliza la sintaxis restringida.

Sintaxis mejorada

Símbolo o expresión Descripción

$

el elemento raíz

. o bien []

operador secundario

..

descenso recursivo

*

comodín. Todos los elementos de un objeto o matriz.

[]

operador de subíndice de matriz. El índice se basa en 0.

[,]

operador de unión

[start:end:step]

operador de segmento de la matriz

?()

aplica una expresión de filtro (script) a la matriz u objeto actual

()

expresión de filtro

@

se usa en expresiones de filtro que hacen referencia al nodo actual que se está procesando

==

igual a, se utiliza en las expresiones de filtro.

!=

no es igual a, se utiliza en las expresiones de filtro.

>

mayor que, se utiliza en las expresiones de filtro.

>=

mayor o igual que, se utiliza en las expresiones de filtro.

<

menor que, se utiliza en expresiones de filtro.

<=

menor o igual que, se utiliza en las expresiones de filtro.

&&

Y lógico, se utiliza para combinar varias expresiones de filtro.

||

O lógico, se utiliza para combinar varias expresiones de filtro.

Ejemplos

Los siguientes ejemplos se basan en los datos XML del ejemplo de Goessner, que hemos modificado agregando matrices adicionales.

{ "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 } } }
Ruta Descripción

$.store.book[*].author

los autores de todos los libros de la tienda

$..author

todos los autores

$.store.*

todos los miembros de la tienda

$.store.*

todos los miembros de la tienda

$.store..price

el precio de todo lo que hay en la tienda

$..*

todos los miembros recursivos de la estructura JSON

$..book[*]

todos los libros

$..book[0]

el primer libro

$..book[-1]

el último libro

$..book[0:2]

los dos primeros libros

$..book[0,1]

los dos primeros libros

$..book[0:4]

los libros del índice 0 al 3 (el índice final no está incluido)

$..book[0:4:2]

los libros en el índice 0, 2

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

todos los libros con un número de isbn

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

todos los libros que cuestan menos de 10 dólares

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

todos los libros que cuestan menos de 10 dólares. (La ruta debe estar entre comillas si contiene espacios en blanco).

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

todos los libros que cuestan menos de 10 dólares

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

todos los libros que cuestan menos de 10 dólares

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

todos los libros en el rango de precios de 10 a 100 dólares, incluidos

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

todos los libros en el rango de precios de 10 a 100 dólares, incluidos. (La ruta debe estar entre comillas si contiene espacios en blanco).

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

todos los libros vendidos o agotados

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

todos los libros vendidos o agotados. (La ruta debe estar entre comillas si contiene espacios en blanco).

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

todos los libros de la categoría Ficción

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

todos los libros de las categorías que no sean Ficción

Más ejemplos de expresiones de filtro:

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]"

Sintaxis restringida

Símbolo o expresión Descripción

. o bien []

operador secundario

[]

operador de subíndice de matriz. El índice se basa en 0.

Ejemplos

Ruta Descripción

.store.book[0].author

el autor del primer libro

.store.book[-1].author

el autor del último libro

.address.city

nombre de la ciudad

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

el título del primer libro

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

el título del último libro

nota

Todo el contenido de Goessner citado en esta documentación está sujeto a la Licencia de Creative Commons.

Prefijos comunes de errores

Cada mensaje de error tiene un prefijo. A continuación se muestra una lista de prefijos comunes de errores:

Prefijo Descripción

ERR

un error general

LIMIT

Se ha superado el error de tamaño máximo. Por ejemplo, se ha superado el límite de tamaño del documento o el límite de profundidad de anidación

INEXISTENTE

una clave o ruta no existe

FUERA DE LOS LÍMITES

un índice de matrices fuera de los límites

SYNTAXERR

error de sintaxis

WRONGTYPE

tipo de valor incorrecto

Métricas relacionadas con JSON

Se proporcionan las siguientes métricas de información JSON:

Información Descripción

json_total_memory_bytes

memoria total asignada a objetos JSON

json_num_documents

el número total de documentos en el motor de Valkey o Redis OSS

Para consultar las métricas principales, ejecute el comando:

info json_core_metrics

Cómo interactúa MemoryDB con JSON

A continuación, se ilustra cómo interactúa MemoryDB con el tipo de datos JSON.

Jerarquía de los operadores

Al evaluar las expresiones condicionales para el filtrado, las &&s tienen prioridad y, a continuación, se evalúan las ||s, como es común en la mayoría de los idiomas. Las operaciones entre paréntesis se ejecutarán primero.

Comportamiento del límite máximo de anidación

El límite máximo de anidación de rutas de MemoryDB es 128. Así que un valor como $.a.b.c.d... solo puede alcanzar 128 niveles.

Administración de valores numéricos

JSON no tiene tipos de datos separados para números enteros y de coma flotante. Todos se llaman números.

Cuando se recibe un número JSON, se puede almacenar en dos formatos. Si el número cabe en un entero con signo de 64 bits, se convierte a ese formato; de lo contrario, se almacena como una cadena. Las operaciones aritméticas en dos números JSON (por ejemplo, JSON.NUMINCRBY y JSON.NUMMULTBY) intentan conservar la mayor precisión posible. Si los dos operandos y el valor resultante caben en un entero con signo de 64 bits, se realiza la aritmética de enteros. De lo contrario, los operandos de entrada se convierten en números de coma flotante de doble precisión según el IEEE de 64 bits, se realiza la operación aritmética y el resultado se convierte de nuevo en una cadena.

Comandos aritméticos NUMINCRBY y NUMMULTBY:

  • Si ambos números son números enteros y el resultado está fuera del rango de int64, se convierte automáticamente en un número de punto flotante de doble precisión.

  • Si al menos uno de los números es un número de punto flotante, el resultado es un número de punto flotante de doble precisión.

  • Si el resultado supera el rango de doble, el comando devolverá un error OVERFLOW.

nota

Antes de la versión 6.2.6.R2 del motor de Redis OSS, cuando se recibía un número JSON en la entrada, este se convertía a una de las dos representaciones binarias internas: un número entero con signo de 64 bits o un número de punto flotante de doble precisión IEEE de 64 bits. No se retiene la cadena original ni nada de su formato. Por lo tanto, cuando se genera un número como parte de una respuesta JSON, se convierte de la representación binaria interna a una cadena imprimible que utiliza reglas de formato genérico. Estas reglas podrían dan como resultado que se genere una cadena diferente de la que se recibió.

  • Si ambos números son números enteros y el resultado está fuera del rango de int64, automáticamente se convierte en un número IEEE de punto flotante de doble precisión de 64 bits.

  • Si al menos uno de los números es un punto flotante, el resultado es un número IEEE de punto flotante de doble precisión de 64 bits.

  • Si el resultado supera el rango de doble IEEE de 64 bits, el comando regresa un error OVERFLOW.

Para obtener una lista de los comandos disponibles, consulte el Comandos admitidos.

Evaluación de sintaxis estricta

MemoryDB no permite rutas JSON con sintaxis no válida, incluso si un subconjunto de la ruta contiene una ruta válida. Esto es para mantener un comportamiento correcto para nuestros clientes.

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.