JSON pentru date științifice (.json)

RFC Standard

JavaScript Object Notation (JSON) este un format text ușor, lizibil pentru oameni, folosit pentru schimbul de date, complet independent de limbaj și utilizat pe scară largă pentru API-uri web.

Convertește din JSON în HTML

Convertor gratuit din JSON în HTML direct în browser. Convertește fișiere instantaneu pe dispozitivul tău.

Comprimă JSON online

Privat - fișierele nu părăsesc niciodată dispozitivul tău

Inspectare și metadate

Sistemele de operare și analizatoarele de fișiere identifică fișierele JSON prin inspectarea secvenței binare inițiale:

Selectează sau plasează fișierele aici

Privat - fișierele nu părăsesc niciodată dispozitivul tău

sau lipește Ctrl+V
Garanție de confidențialitate: nicio transmisie prin rețea: 0 octeți încărcați pe servere externe. Toată procesarea a avut loc local în sandbox-ul browserului tău.

Semnătura antetului la nivel de octet (octeți magici)

Sistemele de operare și analizatoarele de fișiere identifică fișierele JSON prin inspectarea secvenței binare inițiale:

SEMNĂTURĂ HEXAZECIMALĂ (DECALAJ 0):

7B or 5B

REPREZENTARE ASCII: { or [

Standardizare: RFC 8259 / ECMA-404 / ISO/IEC 21778

Specificații tehnice

Arhitectură containerFormat ușor, bazat pe text și independent de limbaj, pentru schimbul de date
CompresieTextul JSON poate fi comprimat cu Gzip, Brotli sau Zstandard; dimensiunea rezultată depinde de date și setări
Ordinea octețilorUnicode codificat în UTF-8 (se recomandă fără marcaj de ordine a octeților / BOM)
Spații de culoareNu se aplică
Canale și structurăȘase tipuri de date de bază: obiect, tablou, șir, număr, boolean și null
Dimensiuni maximeNelimitate; restricționate doar de memoria parserului și lungimea maximă a șirurilor
TransparențăNu se aplică
Streaming și progresivNDJSON (Newline Delimited JSON) / JSON Lines permite procesarea progresivă în flux

Matrice de comparație tehnică: JSON vs. concurenți

Atribut tehnicJSON (Curent)YAMLXMLProtocol Buffers
Complexitatea sintaxeiMinimă (6 tipuri, sintaxă strictă)Ridicată (bazată pe indentare, specificație complexă)Ridicată (etichete de închidere detaliate, spații de nume)Format binar definit prin schemă
Performanța de analizăExtrem de rapidă în toate limbajele moderneLentă (parsare complexă a indentării)Moderată până la lentă (construcție DOM greoaie)Ultra-rapidă (deserializare binară fără copiere)
Comentarii acceptateNu (excluse în mod deliberat pentru a preveni acumularea de metadate)Da (comentarii #)Da (comentarii <!-- -->)Da în fișierele .proto
Dimensiunea sarcinii utile în rețeaText compact; rezultatul compresiei depinde de date și setăriText compactText verbos (repetare masivă de etichete)Binar ultra-compact

Moduri comune de corupție și ghid de recuperare hexazecimală

SyntaxError: tokenul , este neașteptat în JSON la poziția X.

Cauză principală: Virgula finală după ultimul element dintr-un tablou sau obiect, care este strict ilegală în JSON conform RFC 8259.

Recuperare: Elimină virgulele finale din cheile obiectelor și elementele tablourilor înainte să apelezi JSON.parse().

SyntaxError: tokenul ' este neașteptat în JSON.

Cauză principală: Șiruri sau chei încadrate între ghilimele simple ('') în loc de ghilimele duble ("").

Recuperare: Înlocuiește toate șirurile și cheile între ghilimele simple cu variantele standard între ghilimele duble.

Analiză de securitate și vectori de atac asupra parserului

JSON conține doar text și este sigur împotriva execuției directe de cod, însă analizarea de JSON provenit din surse neverificate poate duce la poluarea prototipurilor, ReDoS sau epuizarea memoriei.

Vectori de atac cunoscuți

  • Poluarea prototipurilor: Chei numite '__proto__' sau 'constructor' care modifică Object.prototype în aplicațiile JavaScript.
  • Atac de tip refuz al serviciului prin depășirea stivei, cauzat de structuri JSON imbricate profund (de exemplu, 10.000 de paranteze de deschidere).
  • Pierderea preciziei numerice: numerele JavaScript mai mari de 2^53 - 1 (9.007.199.254.740.991) își pierd precizia fără avertisment.

Cele mai bune practici de securitate: Nu evalua niciodată JSON cu eval(). Folosește JSON.parse() și igienizează proprietățile __proto__ din funcțiile recursive de îmbinare a obiectelor.

Origini istorice și repere

2017RFC 8259 standardizează UTF-8 ca singura codificare de caractere obligatorie pentru JSON.
2013ECMA-404 definește sintaxa JSON, folosită de multe limbaje de programare și platforme.
2001Douglas Crockford specifică JSON pentru a permite comunicarea de date fără stare între browser și server.

Avantaje cheie și beneficii

  • Structură textuală lizibilă pentru oameni, autodescriptivă și concisă.
  • Suport nativ pentru parsare, integrat în motoarele JavaScript (JSON.parse) și disponibil în toate limbajele de programare majore.
  • Specificația strictă previne execuția de cod arbitrar.

Limitări tehnice și dezavantaje

  • Nu acceptă comentarii, virgule la final sau referințe circulare între obiecte.
  • Fără tipuri binare native (datele binare trebuie codificate în base64, mărind dimensiunea cu 33%).
  • Serializare ineficientă comparativ cu formatele binare precum Protocol Buffers sau MessagePack.

Curiozități tehnice interesante

  • Douglas Crockford a adăugat clauza de licență software „Software-ul trebuie folosit pentru bine, nu pentru rău” la instrumentele JSMin JSON originale.
  • JSON este un subset strict al sintaxei JavaScript, dar până la ES2019, caracterele U+2028 și U+2029 brute neescapate erau valide în JSON, dar invalide în șirurile JavaScript.
  • Douglas Crockford a descoperit că browserele web timpurii puteau evalua JSON direct în obiecte utilizând funcția nativă eval() din JavaScript înainte ca API-urile dedicate JSON.parse() să fie standardizate în ECMAScript 5.

Întrebări tehnice frecvente

De ce nu permite JSON comentarii?

Gramatica JSON nu permite comentarii. Implementările pot trata diferit extensiile și datele specifice aplicațiilor, așadar formatul singur nu garantează interoperabilitatea.

Cum stochezi numere întregi pe 64 de biți în JSON fără să pierzi precizia?

Tipul nativ Number din JavaScript este un număr în virgulă mobilă cu dublă precizie, conform standardului IEEE 754, care permite reprezentarea exactă doar a numerelor întregi de până la 2^53 - 1. Numerele întregi pe 64 de biți (cum ar fi ID-urile de baze de date sau marcajele temporale) trebuie serializate ca șiruri (de exemplu, '1234567890123456789') în JSON.

Care este diferența dintre JSON și NDJSON / JSON Lines?

JSON-ul standard încapsulează o sarcină utilă întreagă într-un singur obiect sau tablou rădăcină, necesitând ca parserul să încarce întregul text înainte de evaluare. NDJSON (Newline Delimited JSON) separă înregistrările JSON valide individuale prin caractere de linie nouă (\n), permițând procesarea eficientă, linie cu linie, în flux a unor seturi de date masive, de mai mulți gigabytes.

Perechi de conversie JSON conexe

JSON în HTML

Conversia datelor JSON în cod sursă HTML transformă perechile cheie-valoare structurate în documente web ușor de citit de către om, gata pentru randarea în browser.

HTML în JSON

Conversia codului sursă HTML în date JSON transformă documentele web ușor de citit de către om în perechi cheie-valoare structurate pentru procesare programatică și preluarea de către API-uri.

SQL în JSON

Conversia unui script text de tip Dump SQL într-un export de date JSON transformă tabelele de baze de date relaționale rigide în obiecte flexibile și imbricate pentru aplicațiile web moderne.

JSON în SQLITE

Transformarea fișierelor JSON nestructurate în baze de date relaționale SQLite permite indexarea rapidă și interogarea unor volume mari de date.

ASE în JSON

Conversia fișierelor Adobe Swatch Exchange în structuri JSON pentru culori transformă paletele binare de design în obiecte text lizibile pentru aplicațiile web moderne.

JSON în ASE

Conversia datelor text JSON pentru culori în mostre binare Adobe ASE face legătura dintre tokenurile de design web și aplicațiile profesionale de machetare pentru desktop.

GPL în JSON

Conversia fișierelor text GIMP Palette în structuri JSON pentru culori permite aplicațiilor web să citească direct mostrele de culoare, fără scripturi complexe de analiză.

JSON în CSS

Conversia fișierelor structurate Color JSON în variabile CSS transformă obiectele de date brute în proprietăți native de stilizare pentru paginile web.