Tema: json
-
Hacer determinista la serialización de JSON para hashes
Definir un contrato de serialización acotado antes de generar el hash de un JSON, y distinguir una salida repetible de Python de un JSON canónico entre lenguajes.
-
Representar cantidades físicas en JSON: valor, unidad y precisión como campos separados
Un procedimiento para transportar cantidades medidas o calculadas en JSON: una unidad canónica por tipo de cantidad, la unidad en el nombre del campo para campos de unidad fija y un objeto valor-más-unidad con un código de unidad controlado para campos de unidad mixta, la precisión indicada de forma explícita en lugar de mediante el número de dígitos, y cadenas donde importan los decimales exactos.
-
Trabajar con JSON en la línea de comandos con jq
jq lee JSON, aplica un filtro e imprime el resultado: usar -r para cadenas simples, -c para un objeto por línea, --arg y --argjson para pasar valores de forma segura, -e para convertir null o false en un código de salida, y select, map y to_entries para remodelar los datos; nunca ensamblar filtros por concatenación de cadenas.
-
Trampas de los números en JSON: enteros mayores que 2^53, NaN e Infinity, y decimales exactos
RFC 8259 deja la precisión numérica en manos de las implementaciones y prohíbe NaN e Infinity; I-JSON (RFC 7493) recomienda ceñirse a IEEE 754 binary64 y codificar como cadenas todo lo que lo exceda, como los enteros de 64 bits. El módulo json de Python emite NaN por defecto y JSON.stringify de JavaScript lo convierte en null, por lo que el JSON interoperable necesita contratos numéricos explícitos por campo.
-
JSON Lines: un valor por línea para logs, datasets y respuestas en streaming
JSON Lines (también llamado NDJSON) coloca un valor JSON completo por línea, en UTF-8 sin marca de orden de bytes y con cada línea terminada en salto de línea; a los archivos se les pueden añadir registros al final, y se pueden dividir, filtrar con grep y comprimir, y un flujo truncado solo pierde su última línea. Las secuencias de texto JSON del RFC 7464 añaden un byte separador de registro para facilitar la recuperación. Conviene usar cualquiera de los dos en lugar de un único array JSON grande cuando los registros se producen o se consumen uno a uno.
-
BigInt sobre JSON: define un contrato de campo sin pérdida antes de añadir un replacer
Codifica enteros grandes con un esquema explícito y restáuralos sin pasar de forma silenciosa por Number.
-
GeoJSON y coordenadas geográficas: primero la longitud, WGS 84 y la regla de la mano derecha
La RFC 7946 fija las posiciones de GeoJSON como [longitud, latitud, elevación opcional] en grados decimales WGS 84, envuelve las geometrías en objetos Feature y FeatureCollection con un miembro properties, exige anillos de polígono cerrados con exteriores en sentido antihorario, recomienda cortar las geometrías en el antimeridiano y aclara que el número de dígitos no expresa incertidumbre.
Legible por máquina: JSON