Pereiti prie turinio

JSON Formatavimas: Gražinkite ir Tikrinkite JSON Internete Nemokamai

Akimirksniu suformatuokite suglaudintą JSON su tinkamu įtraukimu. Nemokamas internetinis JSON formatavimo įrankis tikrina sintaksę, gražina kodą ir pagreitina derinimą. Veikia naršyklėje su realaus laiko formatavimui.

JSON Formatuotojas

Formatuokite ir gražinkite savo JSON naudodami šį paprastą įrankį - formatavimas vyksta automatiškai renkant tekstą!

Suformatuotas JSON pasirodys čia automatiškai...

Įkrovimo skaičiuotuvas...
📚

Dokumentacija

Kas yra JSON formatavimo priemonė?

JSON formatavimo priemonė – tai įrankis, kuris perrašo JSON (JavaScript Object Notation) tekstą, pridėdamas įtraukas ir eilučių lūžius, tačiau nekeisdamas pačių duomenų. JSON yra paprastojo teksto formatas struktūriniams duomenims saugoti ir siųsti, sudarytas iš pavadinimo ir reikšmės porų bei sąrašų. Programos paprastai taupo vietą pašalindamos visus perteklinius tarpus, todėl gaunama viena tanki eilutė, kurią žmogui sunku perskaityti. Formatavimo priemonė, dar vadinama gražintuvu arba gražiojo spausdinimo įrankiu, nuosekliai grąžina šiuos tarpus, kad būtų matoma struktūra. Šis įrankis automatiškai formatuoja JSON jį vedant arba įklijavus. Formatavimo mygtuko nėra – išvestis atnaujinama po kiekvieno klavišo paspaudimo. Nustatymo iš naujo mygtukas išvalo įvestį, o kopijavimo mygtukas nukopijuoja suformatuotą rezultatą.

JSON sintaksės taisyklės

JSON apibrėžtas specifikacijoje, vadinamoje RFC 8259. Joje apibrėžti du konteinerių tipai:

Objektai laiko pavadinimo ir reikšmės poras riestiniuose skliaustuose:

1{"name": "John", "age": 30, "city": "New York"}
2

Masyvai laiko sutvarkytus sąrašus laužtiniuose skliaustuose:

1["apple", "banana", "cherry"]
2

JSON reikšmė turi būti vieno iš šešių tipų: simbolių eilutė, skaičius, loginė reikšmė (true arba false), null, objektas arba masyvas.

Daugiausia klaidų lemia kelios taisyklės:

  • Objektų savybių pavadinimai turi būti rašomi dvigubose kabutėse. {name: "John"} yra netinkamas; turi būti {"name": "John"}.
  • Eilutėms reikia naudoti dvigubas, o ne viengubas kabutes.
  • Po paskutinio objekto arba masyvo elemento negali būti kablelio (kablelis gale neleidžiamas).
  • JSON neturi komentarų sintaksės, nors riestinių ir laužtinių skliaustų išvaizda perimta iš „JavaScript“.
  • JSON neturi reikšmės undefined. Trūkstamai reikšmei naudokite null.

Dažna klaida – vietoj JSON įklijuojamas „JavaScript“ objekto literalas. {name: 'John', age: undefined} yra tinkamas „JavaScript“, bet netinkamas JSON. JSON versija yra {"name": "John", "age": null}.

Kaip veikia šis JSON formatavimo įrankis

Daugelis JSON formatavimo priemonių perduoda tekstą funkcijai JSON.parse(), kad sukurtų „JavaScript“ objektą, o tada funkcijai JSON.stringify(), kad paverstų jį atgal į tekstą su tarpais. Šis kelias turi šalutinį poveikį: „JavaScript“ skaičiai yra IEEE 754 dvigubo tikslumo slankiojo kablelio skaičiai, kurie negali tiksliai atvaizduoti kiekvieno sveikojo skaičiaus, kai jis viršija 2^53 − 1 (9,007,199,254,740,991). Toks ID kaip 9007199254740993 po šio proceso gali tapti 9007199254740992.

Šis įrankis šio veiksmo neatlieka. Jis skaito įvestį simbolis po simbolio naudodamas nedidelį rankiniu būdu parašytą analizatorių ir, užuot pavertęs kiekvieną skaičių ar eilutę „JavaScript“ reikšme, nukopijuoja tą teksto dalį tiksliai taip, kaip ji parašyta, tada įdeda ją tinkamu įtraukos lygiu. Kadangi skaičiai niekada nepaverčiami slankiojo kablelio skaičiais, bet kokio dydžio sveikieji skaičiai išlaiko tikslius skaitmenis. Jei objekto tas pats raktas parašytas du kartus, abi kopijos paliekamos savo vietose, o ne sutraukiamos į paskutinę, kaip nutiktų kuriant „JavaScript“ objektą.

Procesas žingsnis po žingsnio:

  1. Perskaityti kitą žetoną (objektą, masyvą, eilutę, skaičių, true, false arba null).
  2. Patikrinti jį pagal JSON gramatiką. Jei žetonas pažeidžia taisyklę, pavyzdžiui, raktas nenurodytas kabutėse arba yra kablelis gale, jį atmesti.
  3. Nepakeistą žetono tekstą nukopijuoti į išvestį.
  4. Pridėti eilutės lūžį ir kiekvienam įdėjimo lygiui objekte arba masyve naudoti po 2 tarpus. Tuščias objektas arba masyvas lieka vienoje eilutėje, kaip {} arba [].
  5. Kartoti, kol bus perskaityta visa įvestis.

Įtrauka yra fiksuota – 2 tarpai; jos pakeisti negalima. Kol įvesties laukas tuščias, išvesties srityje rodomas vietos rezervavimo tekstas „Formatted JSON will appear here automatically...“. Jei įvestis pažeidžia JSON taisyklę, įrankis rodo pranešimą „Invalid JSON: Please check your input“, o ne techninį analizatoriaus pranešimą su tikslia simbolio vieta. Priešingai, naršyklių integruota funkcija JSON.parse() klaidos tekste nurodo simbolio vietą.

Išspręstas pavyzdys

Ši minifikuota įvestis:

1{"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"Anytown","state":"CA"},"hobbies":["reading","hiking","photography"]}
2

tampa:

1{
2  "name": "John Doe",
3  "age": 30,
4  "address": {
5    "street": "123 Main St",
6    "city": "Anytown",
7    "state": "CA"
8  },
9  "hobbies": [
10    "reading",
11    "hiking",
12    "photography"
13  ]
14}
15

Kiekvienas įdėtasis objektas arba masyvas įtraukiamas vienu lygiu labiau nei jo pirminis objektas, todėl ryšys tarp address ir trijų jo laukų iš karto matomas.

Antras pavyzdys parodo, kodėl svarbu kopijuoti literatus. Ši įvestis:

1{"id":9007199254740993}
2

suformatuojama taip:

1{
2  "id": 9007199254740993
3}
4

Skaitmenys išlieka tiksliai tokie, kokie buvo įvesti. Formatavimo priemonė, sukurta naudojant JSON.parse(), o tada JSON.stringify(), vietoj to tyliai paverstų šį skaičių į 9007199254740992.

Dažnos JSON klaidos

  • Savybės pavadinimas be kabučių: {name: "John"}. Pataisymas: {"name": "John"}.
  • Kablelis gale: {"age": 30,}. Pataisymas: pašalinti kablelį prieš uždaromąjį riestinį skliaustą.
  • Nesutampantys skliaustai: {"data": [1, 2}. Pataisymas: prieš uždarant objektą masyvą uždaryti simboliu ].
  • Neuždaryta tekstinė eilutė: {"name": "John}. Pataisymas: pridėti trūkstamą uždarančiąją kabutę.
  • Viengubos kabutės: {'name': 'John'}. Pataisymas: naudoti dvigubas kabutes.
  • undefined, NaN arba Infinity: nė viena iš šių reikšmių nėra tinkama JSON reikšmė. Naudokite null arba eilutę.

Dažnas šių klaidų šaltinis – objekto kopijavimas tiesiai iš naršyklės konsolės arba serverio žurnalo, kuriame dažnai būna tik „JavaScript“ būdinga sintaksė, kurią prieš paverčiant tinkamu JSON reikia sutvarkyti.

Kada naudoti JSON formatavimo priemonę

JSON formatavimo priemonės dažniausiai naudojamos API atsakams tikrinti, nes jie paprastai siunčiami sutrumpinti, kad būtų taupomas pralaidumas. Jos taip pat naudojamos konfigūracijos failams, pavyzdžiui, package.json arba composer.json, rankiniu būdu tikrinti, iš naršyklės vietinės saugyklos arba konsolės nukopijuotiems duomenims skaityti ir iš kitos sistemos gauto duomenų rinkinio struktūrai suprasti.

Kiti JSON formatavimo būdai

  • Naršyklės kūrėjo įrankiai: „Chrome“, „Edge“ ir „Firefox“ automatiškai formatuoja JSON atsakus tinklo skilties peržiūros srityje.
  • Kodo redaktoriai: „Visual Studio Code“ atidarytą JSON failą suformatuoja klavišų deriniu „Alt+Shift+F“ („Shift+Option+F“ sistemoje „Mac“). Dauguma redaktorių turi atitinkamą spartųjį klavišą arba formatavimo plėtinį.
  • Komandinė eilutė: jq (jq . file.json) ir integruotas „Python“ modulis python -m json.tool file.json abu formatuoja JSON iš terminalo.

JSON formatavimo įtraukimas į kodą

Dauguma programavimo kalbų turi JSON biblioteką su įtraukos parinktimi. „JavaScript“:

1const formatted = JSON.stringify(JSON.parse(rawJson), null, 2);
2

„Python“:

1import json
2formatted = json.dumps(json.loads(raw_json), indent=2)
3

Abu būdai išanalizuoja tekstą, paversdami jį vietine duomenų struktūra, o tada iš naujo jį serializuoja su tarpais. Tai paprasta parašyti, tačiau skaičiai gali pasikeisti. „JavaScript“ kiekvieną skaičių saugo kaip dvigubo tikslumo skaičių, todėl 9007199254740993 grįžta kaip 9007199254740992. „Python“ išlaiko sveikuosius skaičius tikslius, nes „Python“ sveikieji skaičiai neturi dydžio ribos, tačiau vis tiek perrašo 1.0e2 kaip 100.0 ir paverčia 1e999 į Infinity, o tai nėra tinkamas JSON. Programos, kurioms reikia tikslių didelių sveikųjų skaičių, pavyzdžiui, duomenų bazės ID, dažnai JSON formatu juos saugo kaip eilutes, o ne skaičius.

Trumpa JSON istorija

Douglasas Crockfordas JSON specifikaciją parengė ankstyvaisiais 2000-aisiais, perimdamas sintaksę iš „JavaScript“ objektų literalų, tačiau pritaikydamas ją naudoti bet kurioje kalboje. RFC 4627 ją įformino 2006 metais. JSON greitai paplito, nes jį buvo trumpiau rašyti nei XML, be to, jis tiesiogiai atitiko „JavaScript“ objektus. Tai buvo svarbu, kai žiniatinklio programos pradėjo gauti duomenis fone, o ne iš naujo įkelti visus puslapius. Iki 2010-ųjų JSON tapo numatytuoju REST API ir tokių duomenų bazių kaip „MongoDB“ formatu.

Dažnai užduodami klausimai

Kas yra JSON formatavimo priemonė? Įrankis, kuris JSON tekstui prideda įtraukas, eilučių lūžius ir tarpus, kad jo struktūrą būtų lengva perskaityti, nekeisdamas duomenų.

Ar formatavimas pakeičia duomenis? Ne. Formatavimas keičia tik tarpus. Šis įrankis nukopijuoja kiekvieną eilutę ir skaičių tiksliai taip, kaip jie buvo įvesti, todėl suformatuotos išvesties reikšmės tiksliai sutampa su įvestimi, įskaitant skaičius, per didelius, kad juos būtų galima tiksliai saugoti kaip „JavaScript“ skaičius.

Kodėl gaunu klaidą „Invalid JSON“? Įvestis pažeidžia JSON taisyklę. Dažnos priežastys yra savybių pavadinimai be kabučių, kablelis gale, viengubos kabutės, neuždaryta eilutė arba nesutampantys skliaustai. Šis įrankis nerodo tikslios problemos simbolio vietos; patikrinus įvestį pagal pirmiau pateiktas taisykles, ją paprastai galima greitai rasti.

Ar JSON gali turėti komentarų? Ne. Specifikacija jų neleidžia. Tokie formatai kaip JSONC ir JSON5 papildo JSON sintaksę komentarų palaikymu tais atvejais, kai tai naudinga, pavyzdžiui, konfigūracijos failuose.

Kokia yra standartinė JSON įtrauka? Du tarpai yra dažniausia žiniatinklio kūrimo konvencija, ją naudoja ir šis įrankis. Kai kuriuose stiliaus vadovuose vietoj to naudojami keturi tarpai arba tabuliacijos simboliai; pati JSON specifikacija nereikalauja jokios konkrečios įtraukos.

Kuo skiriasi JSON.parse() ir JSON.stringify()? JSON.parse() paverčia JSON eilutę į „JavaScript“ reikšmę. JSON.stringify() atlieka atvirkštinį veiksmą – „JavaScript“ reikšmę paverčia JSON eilute ir priima įtraukos argumentą gražiam spausdinimui. Šis įrankis viduje nenaudoja nė vienos iš šių funkcijų, todėl gali tiksliai išsaugoti didelius sveikuosius skaičius.

Šaltiniai

  1. RFC 8259 – „JavaScript“ objektų notacijos (JSON) duomenų mainų formatas
  2. MDN Web Docs: JSON
  3. json.org