Vad är JSON? Ett bättre format för datautbyte

JavaScript Object Notation är en schemafri textbaserad representation av strukturerad data som baseras på nyckel-värdepar och ordnade listor. Även om JSON härrör från JavaScript stöds det antingen inbyggt eller via bibliotek på de flesta större programmeringsspråk. JSON används ofta, men inte uteslutande, för att utbyta information mellan webbklienter och webbservrar. 

Under de senaste 15 åren har JSON blivit allestädes närvarande på nätet. Idag är det det format som valts för nästan alla offentligt tillgängliga webbtjänster, och det används ofta också för privata webbtjänster.

JSONs popularitet har också resulterat i inbyggt JSON-stöd av många databaser. Relationsdatabaser som PostgreSQL och MySQL levereras nu med inbyggt stöd för att lagra och fråga JSON-data. NoSQL-databaser som MongoDB och Neo4j stöder också JSON, även om MongoDB använder en lite modifierad, binär version av JSON bakom kulisserna.

I den här artikeln tar vi en snabb titt på JSON och diskuterar varifrån den kom, dess fördelar jämfört med XML, dess nackdelar, när du ska använda den och när du ska överväga alternativ. Men först, låt oss dyka in i det smutsiga av hur JSON ser ut i praktiken.

JSON-exempel

Här är ett exempel på data kodad i JSON:

{

  “FirstName”: “Jonathan”,

  “LastName”: “Freeman”,

  “LoginCount”: 4,

  “IsWriter”: sant,

  “WorksWith”: [“Spantree Technology Group”, “”],

  "sällskapsdjur": [

    {

      “Namn”: “Lilly”,

      “Typ”: “Tvättbjörn”

    }

  ]

}

Strukturen ovan definierar tydligt vissa personliga attribut. Det innehåller ett för- och efternamn, antalet gånger personen har loggat in, oavsett om personen är författare, en lista över företag personen arbetar med och en lista över personens husdjur (endast ett, i det här fallet). En struktur som den ovan kan skickas från en server till en webbläsare eller en mobilapplikation, som sedan kommer att utföra vissa åtgärder som att visa data eller spara den för senare referens.

JSON är ett generiskt dataformat med ett minimalt antal värdetyper: strängar, siffror, booleaner, listor, objekt och null. Även om notationen är en delmängd av JavaScript representeras dessa typer på alla vanliga programmeringsspråk, vilket gör JSON till en bra kandidat för att överföra data över språkgap.

JSON-filer

JSON-data lagras i filer som slutar med .json-tillägget. I linje med JSON: s läsbara etos är det helt enkelt vanliga textfiler och kan enkelt öppnas och granskas. Som SQLizer-bloggen förklarar är detta också en nyckel till JSONs bredare driftskompatibilitet, eftersom nästan alla språk du kan namnge kan läsa och bearbeta vanliga textfiler, och de är lätta att skicka över Internet.

Varför ska jag använda JSON? 

För att förstå nyttan och betydelsen av JSON måste vi förstå lite om interaktivitetshistoria på webben. 

I början av 2000-talet började interaktiviteten på nätet förändras. Vid den tiden fungerade webbläsaren främst som en dum klient för att visa information, och servern gjorde allt det hårda arbetet för att förbereda innehållet för visning. När en användare klickade på en länk eller en knapp i webbläsaren skickades en begäran till servern, servern skulle förbereda den information som behövs som HTML och webbläsaren skulle göra HTML som en ny sida. Det här mönstret var trögt och ineffektivt och krävde att webbläsaren skulle återge allt på sidan även om bara en del av sidan hade ändrats.

Eftersom helsidesladdningar var kostsamma såg webbutvecklare till nyare teknik för att förbättra den övergripande användarupplevelsen. Under tiden visade sig förmågan att göra webbförfrågningar i bakgrunden medan en sida visades, som nyligen introducerades i Internet Explorer 5, vara en livskraftig metod för att ladda data stegvis för visning. Istället för att ladda om hela innehållet på sidan, klickar du på uppdateringsknappen och utlöser en webbförfrågan som laddas i bakgrunden. När innehållet laddades kunde data manipuleras, sparas och visas på sidan med JavaScript, det universella programmeringsspråket i webbläsare.

REST vs. SOAP: JSON-anslutningen

Ursprungligen överfördes dessa data i XML-format (se nedan för ett exempel) med hjälp av ett meddelandeprotokoll som heter SOAP (Simple Object Access Protocol). Men XML var omfattande och svår att hantera i JavaScript. JavaScript hade redan objekt, som är ett sätt att uttrycka data inom språket, så Douglas Crockford tog en delmängd av det uttrycket som en specifikation för ett nytt datautbytesformat och kallade det JSON. JSON var mycket lättare för människor att läsa och för webbläsare att analysera.

Under loppet av 00-talet började en annan webbtjänstteknologi, kallad Representational State Transfer, eller REST, att köra om SOAP i syfte att överföra data. En av de stora fördelarna med programmering med REST API: er är att du kan använda flera dataformat - inte bara XML utan också JSON och HTML. Eftersom webbutvecklare föredrog JSON framför XML, kom de också att gynna REST framför tvål. Som Kostyantyn Kharchenko uttryckte det på Svitla-bloggen, "På många sätt beror REST framgång på JSON-formatet på grund av dess enkla användning på olika plattformar."

Idag är JSON de facto-standarden för utbyte av data mellan webb- och mobilklienter och back-end-tjänster. 

JSON vs. XML

Som nämnts ovan är huvudalternativet till JSON XML. XML blir dock mindre och mindre vanligt i nya system, och det är lätt att se varför. Nedan följer en version av data du såg ovan, den här gången i XML:

  Jonathan

  Fri man

  4

  Sann

    Spantree Technology Group

      Lilly

      Tvättbjörn

Förutom att vara mer detaljerad (exakt dubbelt så detaljerad i det här fallet) introducerar XML också viss tvetydighet när man analyserar till en JavaScript-vänlig datastruktur. Omvandling av XML till ett JavaScript-objekt kan ta från tiotals till hundratals rader kod och kräver i slutändan anpassning baserat på det specifika objekt som analyseras. Att konvertera JSON till ett JavaScript-objekt tar en kodrad och kräver ingen förkunskap om objektet som analyseras.

Begränsningar av JSON

Även om JSON är ett relativt koncist, flexibelt dataformat som är lätt att arbeta med på många programmeringsspråk, finns det några nackdelar med formatet. Här är de fem huvudsakliga begränsningarna: 

  1. Inget schema. Å ena sidan betyder det att du har total flexibilitet att representera data på vilket sätt du vill. Å andra sidan betyder det att du av misstag kan skapa missformade data mycket enkelt.
  2. Endast en siffertyp: IEEE-754 flytpunktsformat med dubbel precision. Det är en hel mun, men det betyder helt enkelt att du inte kan dra nytta av de olika och nyanserade nummertyperna som finns på många programmeringsspråk.
  3. Ingen datumtyp. Denna utelämning innebär att utvecklare måste använda sig av strängrepresentationer av datum, vilket leder till formateringsavvikelser, eller måste representera datum i form av millisekunder sedan epoken (1 januari 1970).
  4. Inga kommentarer. Detta gör det omöjligt att kommentera fält inbyggda, vilket kräver ytterligare dokumentation och ökar sannolikheten för missförstånd.
  5. Ordrikedom. Medan JSON är mindre omfattande än XML är det inte det mest kortfattade datautbytesformatet. För tjänster med hög volym eller speciella ändamål vill du använda effektivare dataformat.

När ska jag använda JSON?

Om du skriver programvara som kommunicerar med en webbläsare eller en mobil mobilapplikation bör du använda JSON som dataformat. Att använda ett format som XML är ett föråldrat val och en röd flagga till front-end och mobil talang som du annars skulle vilja locka.

När det gäller server-till-server-kommunikation kan det vara bättre med en serieiseringsram som Apache Avro eller Apache Thrift. JSON är inte ett dåligt val här och kan fortfarande vara exakt vad du behöver, men svaret är inte lika tydligt som för webb- och mobilkommunikation.

Om du använder NoSQL-databaser är du ganska fast med vad databasen ger dig. I relationsdatabaser som stöder JSON som typ är en bra tumregel att använda den så lite som möjligt. Relationsdatabaser har ställts in för strukturerad data som passar ett visst schema. Medan de flesta nu stöder mer flexibel data i form av JSON, kan du förvänta dig en prestationshitt när du frågar efter egenskaper inom dessa JSON-objekt.

JSON är det allestädes närvarande, de facto-formatet för att skicka data mellan webbservrar och webbläsare och mobilapplikationer. Dess enkla design och flexibilitet gör det enkelt att läsa och förstå och i de flesta fall lätt att manipulera på det programmeringsspråk du väljer. Bristen på ett strikt schema möjliggör flexibilitet i formatet, men den flexibiliteten gör det ibland svårt att se till att du läser och skriver JSON ordentligt.

JSON-analysator

Den del av programmets kod som omvandlar data som lagras som JSON till ett format som applikationen kan använda kallas en parser. JavaScript, som du förväntar dig, inkluderar en infödd parser, metoden JSON.parse ().

Du kanske måste göra lite mer arbete för att arbeta med JSON på starkt skrivna språk som Scala eller Elm, men den utbredda antagandet av JSON innebär att det finns bibliotek och verktyg som hjälper dig genom alla de svåraste delarna. 

Webbplatsen json.org innehåller en omfattande lista över kodbibliotek som du kan använda för att analysera, generera och manipulera JSON på så olika språk som Python, C # och COBOL.

JSON-verktyg

Om du vill manipulera eller undersöka JSON-kodad data direkt utan att själv skriva kod finns det ett antal online-verktyg som kan hjälpa dig. Alla programmatiska ekvivalenter i kodbiblioteken länkade till ovan, men du kan klippa och klistra in JSON-kod i dessa webbläsarbaserade verktyg för att hjälpa dig att förstå JSON bättre eller utföra snabb och smutsig analys:

  • JSON Formatter: JSONLint formaterar och validerar godtycklig JSON-kod.
  • JSON Viewer: Stack.hu har en webbplats som skapar ett interaktivt träd som hjälper dig att förstå strukturen för din JSON-kod. 
  • JSON Beautifier: Om du vill "snyggt skriva ut" din JSON-kod, med syntaxfärgning och liknande, kan Prettydiff hjälpa dig. 
  • JSON Converter: Behöver du snabbt flytta data från ett JSON-format till något annat? Convertcsv.com har verktyg som kan konvertera JSON till CSV (som sedan kan öppnas i Excel) eller XML.

JSON-handledning

Redo att dyka in och lära dig mer om hur du arbetar med JSON i dina interaktiva applikationer? Mozilla Developer Network har en bra handledning som kommer att komma igång med JSON och JavaScript. Om du är redo att gå vidare till andra språk, kolla in handledning om hur du använder JSON med Java (från Baeldung), med Python (från DataCamp) eller med C # (från Software Testing Help). Lycka till!

Josh Fruhlinger bidrog till den här artikeln.