JSON: Il Formato Dati Universale per il Web
JSON: Il Formato Dati Universale per il Web
JSON (JavaScript Object Notation) è lo standard de facto per l'interscambio dati sul web. Leggero, human-readable, language-independent, e nativamente supportato da JavaScript.
Sintassi e Tipi di Dati
Tipi: String (doppi apici), Number (IEEE 754, niente NaN/Infinity), Boolean (true/false), Null, Object (coppie chiave-valore non ordinate), Array (lista ordinata). Niente commenti, niente trailing comma. Chiavi devono essere stringhe. Encoding: UTF-8 (richiesto da RFC 8259).
Parsing e Serializzazione
JavaScript: JSON.parse(text, reviver), JSON.stringify(value, replacer, space). Reviver: trasforma valori durante parsing. Replacer: filtra/trasforma durante stringificazione. Space: indentazione pretty-print. Altri linguaggi: Librerie native (Python json, Go encoding/json, Rust serde_json, Java Jackson/Gson, C# System.Text.Json).
JSON Schema
Vocabolario per validare struttura JSON. Draft 2020-12 (più recente). Parole chiave: type, properties, required, additionalProperties, items, minItems, maxItems, minimum, maximum, pattern, format (email, uri, date-time), enum, const, allOf/anyOf/oneOf/not, $ref, $defs. Tool: AJV (validatore più veloce), Zod (TypeScript-first), Valibot. Usa per validazione contratti API, validazione config.
JSONPath e Query
Linguaggio query XPath-like per JSON. Sintassi: $ (root), .key, ['key'], .. (discesa ricorsiva), [*] (tutti elementi), [index], [start:end:step], ?(filter). Librerie: jsonpath-plus, JSONPath. Usa per estrarre dati da JSON grandi senza parsing completo.
Streaming e JSON Grandi
Per file grandi: Parser streaming (SAX-style): Oboe.js, clarinet, JSONStream (Node.js). NDJSON (Newline Delimited JSON): Un oggetto JSON per riga, streamable, ottimo per log/analytics. JSON Lines: Stesso concetto. Simdjson: Parsing SIMD-accelerato veloce (binding C++, Rust, Go, Python).
Alternative JSON Binario
MessagePack: Serializzazione binaria compatta, schema-less, ampiamente supportato. BSON: Binary JSON di MongoDB, supporta più tipi (Date, Binary, ObjectId). CBOR: RFC 8949, standard IETF, estensibile. Protocol Buffers / FlatBuffers: Schema-richiesto, più veloce, più piccolo. Usa quando: Alto throughput, bassa latenza, payload grandi, sistemi embedded.
Best Practice per API
Usa camelCase per chiavi (convenzione JavaScript) o snake_case (Python/Ruby). Versione API in URL (/api/v1/) non in JSON. Formato errore consistente: { error: { code, message, details } }. Paginazione: Cursor-based (after/before) preferito a offset. Envelope response: { data: ..., meta: ... }. Evita riferimenti circolari. Documenta con OpenAPI/Swagger.
Considerazioni Sicurezza
Prototype pollution: JSON.parse con reviver può essere sfruttato. Usa Object.create(null) o parser sicuri. Billion laughs: Oggetti profondamente annidati causano stack overflow. Limita profondità. Payload grandi: DoS via esaurimento memoria. Imposta limiti body size. Injection: Sanitizza prima di embeddare in HTML/JS. Usa Content-Type corretto: application/json.
Tool JSON Moderni
jq: Processore JSON command-line (filtra, trasforma, query). gron: Rende JSON greppable. fx: Viewer JSON terminale. httpie: Client HTTP con output JSON. Postman/Insomnia: Test API. JSON Crack: Visualizza JSON come grafo. VS Code: Supporto JSON built-in, validazione JSON Schema.
Lavoriamo insieme
Hai bisogno di maggiori informazioni, aiuto con il tuo progetto o di sviluppare un'idea?
Che si tratti di una domanda semplice, un dubbio rapido o una chat di 5 minuti, mandami un messaggio—non costa nulla e sono sempre pronto ad aiutare. Mi piace ascoltare per capire il problema, essere creativo nelle soluzioni e puntare a idee semplici, affidabili e non complicate da realizzare rapidamente.
Contattami →