Wat is JSON? Een beter formaat voor gegevensuitwisseling

JavaScript Object Notation is een schemaloze, op tekst gebaseerde weergave van gestructureerde gegevens die is gebaseerd op sleutelwaardeparen en geordende lijsten. Hoewel JSON is afgeleid van JavaScript, wordt het native of via bibliotheken in de meeste belangrijke programmeertalen ondersteund. JSON wordt gewoonlijk, maar niet uitsluitend, gebruikt om informatie uit te wisselen tussen webclients en webservers. 

In de afgelopen 15 jaar is JSON alomtegenwoordig op internet. Tegenwoordig is het het voorkeursformaat voor bijna elke openbaar beschikbare webservice, en het wordt ook vaak gebruikt voor privéwebservices.

De populariteit van JSON heeft ook geresulteerd in native JSON-ondersteuning door veel databases. Relationele databases zoals PostgreSQL en MySQL worden nu geleverd met native ondersteuning voor het opslaan en opvragen van JSON-gegevens. NoSQL-databases zoals MongoDB en Neo4j ondersteunen ook JSON, hoewel MongoDB achter de schermen een licht gewijzigde, binaire versie van JSON gebruikt.

In dit artikel zullen we JSON snel bekijken en bespreken waar het vandaan kwam, de voordelen ten opzichte van XML, de nadelen, wanneer u het zou moeten gebruiken en wanneer u alternatieven zou moeten overwegen. Maar laten we eerst eens kijken naar hoe JSON er in de praktijk uitziet.

JSON-voorbeeld

Hier is een voorbeeld van gegevens die zijn gecodeerd in JSON:

{

  "FirstName": "Jonathan",

  "LastName": "Freeman",

  "LoginCount": 4,

  "IsWriter": waar,

  "WorksWith": ["Spantree Technology Group", ""],

  "Huisdieren": [

    {

      "Name": "Lilly",

      "Type": "Wasbeer"

    }

  ]

}

De bovenstaande structuur definieert duidelijk enkele kenmerken van een persoon. Het bevat een voor- en achternaam, het aantal keren dat de persoon zich heeft aangemeld, of deze persoon een schrijver is, een lijst met bedrijven waarmee de persoon samenwerkt en een lijst met de huisdieren van de persoon (in dit geval slechts één). Een structuur zoals hierboven kan worden doorgegeven van een server naar een webbrowser of een mobiele applicatie, die vervolgens een actie uitvoert, zoals het weergeven van de gegevens of het opslaan voor later gebruik.

JSON is een generiek gegevensformaat met een minimaal aantal waardetypen: strings, getallen, booleans, lijsten, objecten en null. Hoewel de notatie een subset van JavaScript is, zijn deze typen vertegenwoordigd in alle gangbare programmeertalen, waardoor JSON een goede kandidaat is om gegevens over taallacunes te verzenden.

JSON-bestanden

JSON-gegevens worden opgeslagen in bestanden die eindigen op de .json-extensie. In overeenstemming met het door mensen leesbare ethos van JSON, zijn dit gewoon platte tekstbestanden die gemakkelijk kunnen worden geopend en onderzocht. Zoals de SQLizer-blog uitlegt, is dit ook een sleutel tot de bredere interoperabiliteit van JSON, aangezien zowat elke taal die je kunt noemen, platte tekstbestanden kan lezen en verwerken, en ze gemakkelijk via internet kunnen worden verzonden.

Waarom zou ik JSON gebruiken? 

Om het nut en het belang van JSON te begrijpen, moeten we de geschiedenis van interactiviteit op internet een beetje begrijpen. 

In de vroege jaren 2000 begon de interactiviteit op internet te transformeren. Destijds diende de browser voornamelijk als een domme client om informatie weer te geven, en de server deed al het harde werk om de inhoud voor te bereiden voor weergave. Wanneer een gebruiker op een link of een knop in de browser klikte, zou er een verzoek naar de server worden gestuurd, de server zou de benodigde informatie als HTML voorbereiden en de browser zou de HTML als een nieuwe pagina weergeven. Dit patroon was traag en inefficiënt, waardoor de browser alles op de pagina opnieuw moest weergeven, zelfs als slechts een gedeelte van de pagina was gewijzigd.

Omdat het opnieuw laden van een volledige pagina kostbaar was, keken webontwikkelaars naar nieuwere technologieën om de algehele gebruikerservaring te verbeteren. Ondertussen bleek de mogelijkheid om op de achtergrond webverzoeken te doen terwijl een pagina werd getoond, die onlangs was geïntroduceerd in Internet Explorer 5, een haalbare benadering om gegevens stapsgewijs te laden voor weergave. In plaats van de volledige inhoud van de pagina opnieuw te laden, zou het klikken op de knop Vernieuwen een webverzoek activeren dat op de achtergrond zou worden geladen. Toen de inhoud was geladen, konden de gegevens worden gemanipuleerd, opgeslagen en op de pagina weergegeven met JavaScript, de universele programmeertaal in browsers.

REST vs. SOAP: de JSON-verbinding

Oorspronkelijk werden deze gegevens overgedragen in XML-indeling (zie hieronder voor een voorbeeld) met behulp van een berichtenprotocol genaamd SOAP (Simple Object Access Protocol). Maar XML was uitgebreid en moeilijk te beheren in JavaScript. JavaScript had al objecten, die een manier zijn om gegevens binnen de taal uit te drukken, dus Douglas Crockford nam een ​​subset van die uitdrukking als specificatie voor een nieuw gegevensuitwisselingsformaat en noemde het JSON. JSON was veel gemakkelijker voor mensen om te lezen en voor browsers om te ontleden.

In de loop van de jaren '00 begon een andere webservicetechnologie, genaamd Representational State Transfer, of REST, SOAP in te halen met het doel gegevens over te dragen. Een van de grote voordelen van programmeren met REST API's is dat u meerdere gegevensindelingen kunt gebruiken - niet alleen XML, maar ook JSON en HTML. Omdat webontwikkelaars de voorkeur gaven aan JSON boven XML, gingen ze ook de voorkeur geven aan REST boven SOAP. Zoals Kostyantyn Kharchenko het op de Svitla-blog zei: "In veel opzichten is het succes van REST te danken aan het JSON-formaat vanwege het gebruiksgemak op verschillende platforms."

Tegenwoordig is JSON de de facto standaard voor het uitwisselen van gegevens tussen web- en mobiele clients en back-endservices. 

JSON versus XML

Zoals hierboven vermeld, is XML het belangrijkste alternatief voor JSON. XML wordt echter steeds minder gebruikelijk in nieuwe systemen, en het is gemakkelijk te begrijpen waarom. Hieronder ziet u een versie van de gegevens die u hierboven zag, dit keer in XML:

  Jonathan

  Freeman

  4

  waar

    Spantree Technology Group

      Lilly

      Wasbeer

XML is niet alleen meer uitgebreid (in dit geval precies twee keer zo uitgebreid), maar introduceert ook enige dubbelzinnigheid bij het parseren in een JavaScript-vriendelijke gegevensstructuur. Het converteren van XML naar een JavaScript-object kan tientallen tot honderden regels code in beslag nemen en vereist uiteindelijk aanpassing op basis van het specifieke object dat wordt geparseerd. Het converteren van JSON naar een JavaScript-object vereist één regel code en vereist geen voorkennis over het object dat wordt geparseerd.

Beperkingen van JSON

Hoewel JSON een relatief beknopt, flexibel gegevensformaat is waarmee in veel programmeertalen gemakkelijk kan worden gewerkt, heeft het formaat enkele nadelen. Hier zijn de vijf belangrijkste beperkingen: 

  1. Geen schema. Enerzijds betekent dit dat u totale flexibiliteit heeft om de gegevens op elke gewenste manier weer te geven. Aan de andere kant betekent dit dat u heel gemakkelijk per ongeluk misvormde gegevens kunt creëren.
  2. Slechts één nummertype: het IEEE-754 drijvende-komma-formaat met dubbele precisie. Dat is nogal een mondvol, maar het betekent simpelweg dat je geen gebruik kunt maken van de diverse en genuanceerde cijfertypes die in veel programmeertalen beschikbaar zijn.
  3. Geen datumtype. Deze weglating betekent dat ontwikkelaars hun toevlucht moeten nemen tot het gebruik van tekenreeksweergaven van datums, wat leidt tot verschillen in opmaak, of dat ze datums moeten weergeven in de vorm van milliseconden sinds het tijdperk (1 januari 1970).
  4. Geen reacties. Dit maakt het onmogelijk om velden inline te annoteren, waardoor aanvullende documentatie nodig is en de kans op misverstanden groter wordt.
  5. Breedsprakigheid. Hoewel JSON minder uitgebreid is dan XML, is het niet het meest beknopte formaat voor gegevensuitwisseling. Voor grote volumes of services voor speciale doeleinden wilt u efficiëntere gegevensindelingen gebruiken.

Wanneer moet ik JSON gebruiken?

Als u software schrijft die communiceert met een browser of native mobiele applicatie, moet u JSON als gegevensformaat gebruiken. Het gebruik van een formaat als XML is een verouderde keuze en een rode vlag voor front-end en mobiel talent dat je anders graag zou willen aantrekken.

In het geval van server-naar-server-communicatie is het misschien beter om een ​​serialisatieframework te gebruiken, zoals Apache Avro of Apache Thrift. JSON is hier geen slechte keuze en is misschien nog steeds precies wat u nodig hebt, maar het antwoord is niet zo duidelijk als voor web- en mobiele communicatie.

Als u NoSQL-databases gebruikt, zit u vrijwel vast aan alles wat de database u geeft. In relationele databases die JSON als type ondersteunen, is een goede vuistregel om het zo min mogelijk te gebruiken. Relationele databases zijn afgestemd op gestructureerde gegevens die passen bij een bepaald schema. Hoewel de meeste nu meer flexibele gegevens in de vorm van JSON ondersteunen, kunt u een prestatiehit verwachten bij het zoeken naar eigenschappen binnen die JSON-objecten.

JSON is het alomtegenwoordige, de facto formaat voor het verzenden van gegevens tussen webservers en browsers en mobiele applicaties. Het eenvoudige ontwerp en de flexibiliteit maken het gemakkelijk te lezen en te begrijpen, en in de meeste gevallen gemakkelijk te manipuleren in de programmeertaal van uw keuze. Het ontbreken van een strikt schema maakt flexibiliteit van het formaat mogelijk, maar die flexibiliteit maakt het soms moeilijk om ervoor te zorgen dat u JSON correct leest en schrijft.

JSON-parser

Het deel van de code van een applicatie dat gegevens die zijn opgeslagen als JSON, omzet in een indeling die de applicatie kan gebruiken, wordt een parser genoemd. JavaScript, zoals je zou verwachten, bevat een native parser, de JSON.parse () - methode.

Het kan zijn dat je wat meer werk moet doen om met JSON te werken in sterk getypeerde talen zoals Scala of Elm, maar de wijdverspreide acceptatie van JSON betekent dat er bibliotheken en hulpprogramma's zijn om je door alle moeilijkste onderdelen te helpen. 

De json.org-website bevat een uitgebreide lijst met codebibliotheken die u kunt gebruiken om JSON te parseren, genereren en manipuleren, in talen die zo divers zijn als Python, C # en COBOL.

JSON-hulpprogramma's

Als u JSON-gecodeerde gegevens rechtstreeks wilt manipuleren of onderzoeken, zonder zelf code te schrijven, zijn er een aantal online hulpprogramma's die u kunnen helpen. Alle programmatische equivalenten in de codebibliotheken waarnaar hierboven wordt verwezen, maar u kunt JSON-code knippen en plakken in deze browsergebaseerde tools om u te helpen JSON beter te begrijpen of om een ​​snelle en vuile analyse uit te voeren:

  • JSON Formatter: JSONLint formatteert en valideert willekeurige JSON-code.
  • JSON Viewer: Stack.hu heeft een site die een interactieve boomstructuur zal maken om u te helpen de structuur van uw JSON-code te begrijpen. 
  • JSON Beautifier: Als je je JSON-code "mooi wilt afdrukken", met syntaxiskleuren en dergelijke, kan Prettydiff je helpen. 
  • JSON Converter: moet u snel gegevens van een JSON-indeling naar iets anders verplaatsen? Convertcsv.com heeft tools die JSON kunnen converteren naar CSV (dat vervolgens kan worden geopend in Excel) of XML.

JSON-zelfstudie

Klaar om erin te duiken en meer te leren over hoe u met JSON werkt in uw interactieve applicaties? Het Mozilla Developer Network heeft een geweldige tutorial waarmee je aan de slag kunt met JSON en JavaScript. Als je klaar bent om naar andere talen te gaan, bekijk dan de tutorial over het gebruik van JSON met Java (van Baeldung), met Python (van DataCamp) of met C # (van Software Testing Help). Succes!

Josh Fruhlinger heeft bijgedragen aan dit artikel.