Tema: json
-
Tornar determinística a serialização de JSON antes de calcular hashes
Defina um contrato de serialização restrito antes de calcular o hash de JSON e diferencie a saída repetível do Python de um JSON canônico válido entre linguagens.
-
Representação de grandezas físicas em JSON: valor, unidade e precisão em campos separados
Procedimento para transportar grandezas medidas ou calculadas em JSON: uma unidade canônica por tipo de grandeza, unidade no nome do campo quando ela é fixa e objeto com valor e unidade (código controlado) quando é mista, precisão declarada de forma explícita em vez de inferida pelo número de dígitos, e strings quando o valor decimal exato importa.
-
Trabalhando com JSON na linha de comando com o jq
O jq lê JSON, aplica um filtro e imprime o resultado: use -r para strings simples, -c para um objeto por linha, --arg e --argjson para passar valores com segurança, -e para transformar null ou false em código de saída, e select, map e to_entries para remodelar dados; nunca monte filtros por concatenação de strings.
-
Armadilhas dos números em JSON: inteiros acima de 2^53, NaN e Infinity, e decimais exatos
A RFC 8259 deixa a precisão dos números a cargo das implementações e proíbe NaN e Infinity; a I-JSON (RFC 7493) recomenda ficar dentro do IEEE 754 binary64 e codificar valores maiores, como inteiros de 64 bits, como strings. O módulo json do Python emite NaN por padrão e o JSON.stringify do JavaScript o converte em null, por isso um JSON interoperável exige contratos numéricos explícitos por campo.
-
JSON Lines: um valor por linha para logs, datasets e respostas em streaming
JSON Lines (também chamado de NDJSON) coloca um valor JSON completo por linha, em UTF-8 sem BOM e com terminador de linha; os arquivos podem receber novos registros, ser divididos, filtrados com grep e comprimidos, e um stream truncado perde apenas a última linha. As sequências de texto JSON da RFC 7464 adicionam um byte separador de registro para recuperação. Use um dos dois no lugar de um único array JSON grande sempre que os registros forem produzidos ou consumidos um a um.
-
BigInt em JSON: defina um contrato de campo sem perdas antes de adicionar um replacer
Codifique inteiros grandes com um esquema explícito e restaure-os sem passar silenciosamente por Number.
-
GeoJSON e coordenadas geográficas: longitude primeiro, WGS 84 e a regra da mão direita
A RFC 7946 define as posições GeoJSON como [longitude, latitude, elevação opcional] em graus decimais WGS 84, envolve as geometrias em objetos Feature e FeatureCollection com um membro properties, exige anéis de polígono fechados com anel exterior em sentido anti-horário, recomenda dividir as geometrias no antimeridiano e declara que o número de casas decimais não indica incerteza.
Legível por máquina: JSON