JSON Formatter: Forskøn & Valider JSON Online Gratis
Formater minificeret JSON øjeblikkeligt med korrekt indrykning. Gratis online JSON-formatter validerer syntaks, forskønner kode og gør fejlfinding hurtigere. Fungerer i browseren med realtidsformatering.
JSON Formatter
Formater og forskøn din JSON med dette enkle værktøj - formattering sker automatisk, mens du skriver!
Formateret JSON vises her automatisk...
Dokumentation
Hvad er en JSON-formater?
Et JSON-formateringsværktøj er et værktøj, der tager JSON-tekst (JavaScript Object Notation) og skriver den om med indrykning og linjeskift uden at ændre selve dataene. JSON er et almindeligt tekstformat til lagring og overførsel af strukturerede data, opbygget af navn/værdi-par og lister. Programmer sparer normalt plads ved at fjerne alle overflødige blanktegn, hvilket giver én tæt pakket linje, der er svær for mennesker at læse. Et formateringsværktøj, også kaldet en beautifier eller pretty printer, tilføjer disse blanktegn igen på en ensartet måde, så strukturen bliver synlig. Dette værktøj formaterer JSON automatisk, mens teksten skrives eller indsættes. Der er ingen formateringsknap; outputtet opdateres ved hvert tastetryk. En nulstillingsknap rydder inputtet, og en kopieringsknap kopierer det formaterede resultat.
Regler for JSON-syntaks
JSON er defineret af en specifikation kaldet RFC 8259. Den har to containertyper:
Objekter indeholder navn/værdi-par inden for krøllede parenteser:
1{"name": "John", "age": 30, "city": "New York"}
2Arrays indeholder ordnede lister inden for kantede parenteser:
1["apple", "banana", "cherry"]
2En værdi i JSON skal være én af seks typer: en streng, et tal, en boolesk værdi (true eller false), null, et objekt eller et array.
Nogle få regler er årsag til de fleste fejl:
- Egenskabsnavne skal stå i dobbelte anførselstegn.
{name: "John"}er ugyldig; den skal være{"name": "John"}. - Strenge skal bruge dobbelte anførselstegn, ikke enkelte.
- Der må ikke stå et komma efter det sidste element i et objekt eller array (ingen afsluttende kommaer).
- JSON har ingen syntaks til kommentarer, selv om udseendet med krøllede og kantede parenteser stammer fra JavaScript.
- JSON har ingen
undefined. Brugnulltil en manglende værdi.
En almindelig fejl er at indsætte en JavaScript-objektliteral i stedet for JSON. {name: 'John', age: undefined} er gyldig JavaScript, men ikke gyldig JSON. JSON-versionen er {"name": "John", "age": null}.
Sådan fungerer dette JSON-formateringsværktøj
Mange JSON-formateringsværktøjer kører teksten gennem JSON.parse() for at opbygge et JavaScript-objekt og kører derefter JSON.stringify() for at omdanne det til tekst igen med mellemrum. Denne tur-retur-proces har en bivirkning: JavaScript-tal er IEEE 754 dobbeltpræcisions-flydende tal, som ikke kan repræsentere alle heltal nøjagtigt, når de overskrider 2^53 − 1 (9,007,199,254,740,991). Et ID som 9007199254740993 kan komme ud som 9007199254740992 efter denne tur-retur-proces.
Dette værktøj undgår dette trin. Det læser inputtet tegn for tegn med en lille håndskrevet parser og kopierer i stedet for at konvertere hvert tal eller hver streng til en JavaScript-værdi tekststykket nøjagtigt, som det er skrevet, hvorefter det placeres på det korrekte indrykningsniveau. Da tal aldrig konverteres til flydende tal, bevarer heltal af enhver størrelse deres nøjagtige cifre. Hvis et objekt har den samme nøgle skrevet to gange, bevares begge forekomster på deres pladser i stedet for at blive slået sammen til den sidste, sådan som det ville ske ved opbygning af et JavaScript-objekt.
Processen trin for trin:
- Læs det næste token (et objekt, et array, en streng, et tal,
true,falseellernull). - Kontrollér det mod JSON-grammatikken. Afvis det, hvis det bryder en regel, f.eks. en nøgle uden anførselstegn eller et afsluttende komma.
- Kopiér tokenets tekst uændret til outputtet.
- Tilføj et linjeskift, og indryk med 2 mellemrum for hvert indlejringsniveau i et objekt eller array. Et objekt eller array uden indhold forbliver på én linje som
{}eller[]. - Gentag, indtil hele inputtet er læst.
Indrykningen er fast på 2 mellemrum; der er ingen indstilling til at ændre den. Mens inputfeltet er tomt, viser outputpanelet pladsholderteksten "Formatted JSON will appear here automatically...". Hvis inputtet bryder en JSON-regel, viser værktøjet meddelelsen "Invalid JSON: Please check your input" i stedet for en teknisk parser-meddelelse med den nøjagtige tegnposition. Browseres indbyggede JSON.parse() angiver derimod en tegnposition i fejlteksten.
Regneeksempel
Dette minificerede input:
1{"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"Anytown","state":"CA"},"hobbies":["reading","hiking","photography"]}
2bliver til:
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}
15Hvert indlejret objekt eller array indrykkes ét niveau mere end dets overordnede objekt, så forholdet mellem address og dets tre felter er synligt ved et øjekast.
Et andet eksempel viser, hvorfor det er vigtigt at kopiere literaler. Dette input:
1{"id":9007199254740993}
2formateres til:
1{
2 "id": 9007199254740993
3}
4Cifrene forbliver nøjagtigt, som de blev skrevet. En formater, der er bygget på JSON.parse() efterfulgt af JSON.stringify(), ville i stedet lydløst omdanne tallet til 9007199254740992.
Almindelige JSON-fejl
- Egenskabsnavn uden anførselstegn:
{name: "John"}. Løsning:{"name": "John"}. - Afsluttende komma:
{"age": 30,}. Løsning: Fjern kommaet før den afsluttende krøllede parentes. - Uoverensstemmende parenteser:
{"data": [1, 2}. Løsning: Luk arrayet med], før objektet lukkes. - Uafsluttet streng:
{"name": "John}. Løsning: Tilføj det manglende afsluttende anførselstegn. - Enkelte anførselstegn:
{'name': 'John'}. Løsning: Brug dobbelte anførselstegn. undefined,NaNellerInfinity: Ingen af disse er gyldige JSON-værdier. Brugnulleller en streng.
En hyppig årsag til disse fejl er at kopiere et objekt direkte fra en browserkonsol eller en serverlog, som ofte indeholder JavaScript-specifik syntaks, der skal ryddes op, før den er gyldig JSON.
Hvornår et JSON-formateringsværktøj kan bruges
JSON-formateringsværktøjer bruges oftest til at undersøge API-svar, som normalt sendes minificeret for at spare båndbredde. De bruges også til manuelt at kontrollere konfigurationsfiler som package.json eller composer.json, læse data kopieret fra en browsers lokale lager eller konsol og forstå strukturen af et datasæt, der er modtaget fra et andet system.
Andre måder at formatere JSON på
- Browserens udviklerværktøjer: Chrome, Edge og Firefox formaterer JSON-svar automatisk i forhåndsvisningsruden på fanen Netværk.
- Kodeeditorer: Visual Studio Code formaterer en åben JSON-fil med Alt+Shift+F (Shift+Option+F på en Mac). De fleste editorer har en tilsvarende genvej eller en formateringsudvidelse.
- Kommandolinje:
jq(jq . file.json) og Pythons indbyggedepython -m json.tool file.jsonformaterer begge JSON fra en terminal.
Indbygning af JSON-formatering i kode
De fleste programmeringssprog indeholder et JSON-bibliotek med en indstilling til indrykning. I JavaScript:
1const formatted = JSON.stringify(JSON.parse(rawJson), null, 2);
2I Python:
1import json
2formatted = json.dumps(json.loads(raw_json), indent=2)
3Begge metoder parser teksten til en indfødt datastruktur og serialiserer den derefter igen med mellemrum. Det er enkelt at skrive, men det kan ændre tallene. JavaScript gemmer alle tal som double, så 9007199254740993 kommer tilbage som 9007199254740992. Python bevarer heltal nøjagtigt, fordi Python-heltal ikke har nogen størrelsesbegrænsning, men omskriver stadig 1.0e2 til 100.0 og omdanner 1e999 til Infinity, hvilket ikke er gyldig JSON. Programmer, der har brug for store heltal med nøjagtig værdi, f.eks. database-ID'er, gemmer dem ofte som strenge i JSON i stedet for som tal.
En kort historie om JSON
Douglas Crockford specificerede JSON i begyndelsen af 2000'erne med syntaks hentet fra JavaScript-objektliteraler, men gjorde formatet anvendeligt fra ethvert sprog. RFC 4627 formaliserede det i 2006. Det spredte sig hurtigt, fordi det var kortere at skrive end XML og kunne mappes direkte til JavaScript-objekter, hvilket fik betydning, da webapplikationer begyndte at hente data i baggrunden i stedet for at genindlæse hele sider. I 2010'erne var det blevet standardformatet for REST-API'er og for databaser som MongoDB.
Ofte stillede spørgsmål
Hvad er en JSON-formater? Et værktøj, der tilføjer indrykning, linjeskift og mellemrum til JSON-tekst, så strukturen er let at læse uden at ændre dataene.
Ændrer formatering dataene? Nej. Formatering ændrer kun blanktegn. Dette værktøj kopierer hver streng og hvert tal nøjagtigt, som de blev skrevet, så værdierne i det formaterede output stemmer præcist overens med inputtet, herunder tal, der er for store til at blive gemt nøjagtigt som et JavaScript-tal.
Hvorfor får jeg en fejlmeddelelse om "Invalid JSON"? Inputtet bryder en JSON-regel. Almindelige årsager er egenskabsnavne uden anførselstegn, et afsluttende komma, enkelte anførselstegn, en uafsluttet streng eller en uoverensstemmende parentes. Dette værktøj viser ikke den nøjagtige tegnposition for problemet; en kontrol af inputtet mod reglerne ovenfor finder det normalt hurtigt.
Kan JSON have kommentarer? Nej. Specifikationen tillader dem ikke. Formater som JSONC og JSON5 tilføjer understøttelse af kommentarer oven på JSON-syntaksen i tilfælde, hvor det er nyttigt, f.eks. i konfigurationsfiler.
Hvad er standardindrykningen i JSON? To mellemrum er den mest almindelige konvention i webudvikling, og det er den indrykning, dette værktøj bruger. Nogle stilvejledninger bruger i stedet fire mellemrum eller tabulatorer; selve JSON-specifikationen kræver ikke en bestemt indrykning.
Hvad er forskellen mellem JSON.parse() og JSON.stringify()?
JSON.parse() omdanner en JSON-streng til en JavaScript-værdi. JSON.stringify() gør det omvendte ved at omdanne en JavaScript-værdi til en JSON-streng og accepterer et indrykningsargument til pretty-printing. Dette værktøj bruger ingen af funktionerne internt, hvilket gør det muligt at bevare store heltal nøjagtigt.