Sintaxis
Reglas
{ }Objeto (pares clave-valor sin orden)
[ ]Array (lista ordenada de valores)
"key": valueLas claves deben ser cadenas entre comillas dobles
No trailing commaEl último elemento no debe tener coma
No commentsJSON no permite comentarios
Ejemplo mínimo
{ "name": "Alice", "age": 30, "active": true }
Tipos de datos
Seis tipos de valor
"string"Texto UTF-8 entre comillas dobles
42 / 3.14Número (entero o punto flotante)
true / falseBooleano
nullNulo (ausencia de valor)
{ }Objeto
[ ]Array
Secuencias de escape en cadenas
\"Comilla doble
\\Barra invertida
\n \tNueva línea, tabulador
\uXXXXEscape Unicode (hexadecimal)
Objetos
Sintaxis de objeto
{ "id": 1, "name": "Widget", "tags": ["new", "sale"] }
Reglas
KeysDeben ser cadenas únicas entre comillas dobles
ValuesCualquier tipo JSON válido
OrderEl orden de las claves no está garantizado
NestingLos objetos pueden contener objetos
Arrays
Sintaxis de array
[1, "two", true, null, {"key": "val"}]
Array de tipos mixtos
{ "matrix": [[1, 2], [3, 4]], "empty": [] }
Reglas
OrderedLos elementos mantienen el orden de inserción
Mixed typesLos elementos del array pueden ser de distintos tipos
IndexingBase cero (en la mayoría de lenguajes)
Anidamiento
Estructura anidada
{ "user": { "name": "Alice", "address": { "city": "Boston" }, "scores": [95, 88, 72] } }
Patrones de acceso
obj.user.nameNotación de punto (JavaScript)
obj["user"]["name"]Notación de corchetes
obj.user.scores[0]Índice de array dentro de objeto anidado
Validación de esquema
Ejemplo de JSON Schema
{ "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer", "minimum": 0 } }, "required": ["name"] }
Palabras clave del esquema
typestring, number, integer, boolean, object, array, null
requiredArray de nombres de propiedades obligatorias
propertiesDefine las propiedades esperadas del objeto
enumRestringir a un conjunto fijo de valores
minLength / maxLengthRestricciones de longitud de cadena
minimum / maximumRestricciones de rango numérico
Fundamentos de jq
Filtros comunes
.Identidad — pasar la entrada tal cual
.keyAcceder a la clave del objeto
.key.nestedAcceder a clave anidada
.[0]Primer elemento del array
.[]Iterar todos los elementos del array
select(.age > 20)Filtrar por condición
map(.name)Transformar cada elemento
lengthLongitud del array o cadena
keysClaves del objeto como array
Ejemplos de jq
echo '{"a":1}' | jq '.a' # 1 echo '[1,2,3]' | jq 'map(. * 2)' # [2,4,6] cat data.json | jq '.users[].name' cat data.json | jq '.[] | select(.active)'
Patrones comunes
Respuesta de API
{ "status": 200, "data": [{"id": 1, "name": "Alice"}], "meta": {"total": 42, "page": 1} }
Archivo de configuración
{ "host": "localhost", "port": 8080, "debug": false, "features": ["auth", "logging"] }
Consejos
ValidateUsar jsonlint o python -m json.tool
Pretty printjq . file.json o python -m json.tool
JSONLUn objeto JSON por línea (delimitado por salto de línea)
JSON5 / JSONCExtensiones que permiten comentarios y comas finales