JSON-formaterare: Förskönande & Validering av JSON Online Gratis
Formatera minimerad JSON direkt med korrekt indrag. Gratis online JSON-formaterare validerar syntax, förskönrar kod och gör felsökning snabbare. Fungerar i webbläsare med realtidsformatering.
JSON-formaterare
Formatera och förbättra din JSON med detta enkla verktyg - formatering sker automatiskt medan du skriver!
Formaterad JSON visas här automatiskt...
Dokumentation
Vad är en JSON-formaterare?
En JSON-formaterare är ett verktyg som tar JSON-text (JavaScript Object Notation) och skriver om den med indrag och radbrytningar utan att ändra själva datan. JSON är ett klartextformat för lagring och överföring av strukturerade data, uppbyggt av namn/värde-par och listor. Program sparar vanligtvis utrymme genom att ta bort alla överflödiga blanksteg, vilket ger en enda tät rad som är svår för människor att läsa. En formaterare, även kallad beautifier eller pretty printer, lägger tillbaka blankstegen på ett enhetligt sätt så att strukturen blir synlig. Det här verktyget formaterar JSON automatiskt medan den skrivs eller klistras in. Det finns ingen formateringsknapp; resultatet uppdateras vid varje tangenttryckning. En återställningsknapp rensar inmatningen och en kopieringsknapp kopierar det formaterade resultatet.
Regler för JSON-syntax
JSON definieras av en specifikation med namnet RFC 8259. Den har två behållartyper:
Objekt innehåller namn/värde-par inom klammerparenteser:
1{"name": "John", "age": 30, "city": "New York"}
2Arrayer innehåller ordnade listor inom hakparenteser:
1["apple", "banana", "cherry"]
2Ett värde i JSON måste vara en av sex typer: en sträng, ett tal, ett booleskt värde (true eller false), null, ett objekt eller en matris.
Några regler orsakar de flesta felen:
- Egenskapsnamn måste omges av dubbla citationstecken.
{name: "John"}är ogiltigt; det måste vara{"name": "John"}. - Strängar måste använda dubbla citationstecken, inte enkla.
- Ett kommatecken får inte följa efter det sista elementet i ett objekt eller en matris (inga avslutande kommatecken).
- JSON har ingen syntax för kommentarer, även om utseendet med klammer- och hakparenteser kommer från JavaScript.
- JSON har inget
undefined. Användnullför ett saknat värde.
Ett vanligt misstag är att klistra in en JavaScript-objektliteral i stället för JSON. {name: 'John', age: undefined} är giltig JavaScript men inte giltig JSON. JSON-versionen är {"name": "John", "age": null}.
Så fungerar den här JSON-formateraren
Många JSON-formaterare kör texten genom JSON.parse() för att skapa ett JavaScript-objekt och kör sedan JSON.stringify() för att omvandla det tillbaka till text med mellanrum. Den omvägen har en bieffekt: JavaScript-tal är IEEE 754-flyttal med dubbel precision, som inte kan representera alla heltal exakt när de överskrider 2^53 − 1 (9,007,199,254,740,991). Ett ID som 9007199254740993 kan komma ut som 9007199254740992 efter den omvägen.
Det här verktyget undviker det steget. Det läser indata tecken för tecken med hjälp av en liten handskriven parser och kopierar varje textstycke exakt som det skrevs, i stället för att omvandla varje tal eller sträng till ett JavaScript-värde. Därefter placerar det texten på rätt indragna nivå. Eftersom tal aldrig omvandlas till flyttal behåller heltal av alla storlekar sina exakta siffror. Om ett objekt har samma nyckel skriven två gånger behålls båda kopiorna på sina platser i stället för att slås ihop till den sista, vilket skulle ske om ett JavaScript-objekt skapades.
Processen steg för steg:
- Läs nästa token (ett objekt, en matris, en sträng, ett tal,
true,falseellernull). - Kontrollera den mot JSON-grammatiken. Avvisa den om den bryter mot en regel, till exempel en nyckel utan citationstecken eller ett avslutande kommatecken.
- Kopiera tokenens text oförändrad till resultatet.
- Lägg till en radbrytning och använd 2 blanksteg i indrag för varje nästlingsnivå i ett objekt eller en matris. Ett tomt objekt eller en tom matris förblir på en rad, som
{}eller[]. - Upprepa tills hela inmatningen har lästs.
Indraget är fast på 2 blanksteg; det finns ingen inställning för att ändra det. När inmatningsfältet är tomt visar resultatpanelen platshållartexten ”Formatted JSON will appear here automatically...”. Om inmatningen bryter mot en JSON-regel visar verktyget meddelandet ”Invalid JSON: Please check your input” i stället för ett tekniskt parsermeddelande med den exakta teckenpositionen. Webbläsarnas inbyggda JSON.parse() anger däremot en teckenposition i feltexten.
Räkneexempel
Den här minifierade inmatningen:
1{"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"Anytown","state":"CA"},"hobbies":["reading","hiking","photography"]}
2blir:
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}
15Varje nästlat objekt eller matris får ett nivådjup mer i indrag än sitt överordnade objekt, så att relationen mellan address och dess tre fält syns direkt.
Ett andra exempel visar varför det är viktigt att kopiera literaler. Den här inmatningen:
1{"id":9007199254740993}
2formateras till:
1{
2 "id": 9007199254740993
3}
4Siffrorna förblir exakt som de skrevs. En formaterare som bygger på JSON.parse() följt av JSON.stringify() skulle i stället tyst omvandla talet till 9007199254740992.
Vanliga JSON-fel
- Egenskapsnamn utan citationstecken:
{name: "John"}. Åtgärd:{"name": "John"}. - Avslutande kommatecken:
{"age": 30,}. Åtgärd: ta bort kommatecknet före den avslutande klammerparentesen. - Felaktigt matchade parenteser:
{"data": [1, 2}. Åtgärd: stäng matrisen med]innan objektet stängs. - Oavslutad sträng:
{"name": "John}. Åtgärd: lägg till det saknade avslutande citationstecknet. - Enkla citationstecken:
{'name': 'John'}. Åtgärd: använd dubbla citationstecken. undefined,NaNellerInfinity: inget av dessa är giltiga JSON-värden. Användnulleller en sträng.
En vanlig källa till dessa fel är att kopiera ett objekt direkt från en webbläsares konsol eller en serverlogg, som ofta innehåller JavaScript-specifik syntax som måste rensas bort innan den är giltig JSON.
När en JSON-formaterare används
JSON-formaterare används oftast för att granska API-svar, som vanligtvis skickas minifierade för att spara bandbredd. De används också för att manuellt kontrollera konfigurationsfiler som package.json eller composer.json, läsa data som kopierats från en webbläsares lokala lagring eller konsol och förstå strukturen hos ett dataset från ett annat system.
Andra sätt att formatera JSON
- Webbläsarens utvecklarverktyg: Chrome, Edge och Firefox formaterar JSON-svar automatiskt i förhandsgranskningspanelen på fliken Nätverk.
- Kodredigerare: Visual Studio Code formaterar en öppen JSON-fil med Alt+Shift+F (Shift+Option+F på Mac). De flesta redigerare har en motsvarande genväg eller ett tillägg för formatering.
- Kommandorad:
jq(jq . file.json) och Pythons inbyggdapython -m json.tool file.jsonformaterar båda JSON från en terminal.
Bygga in JSON-formatering i kod
De flesta programmeringsspråk innehåller ett JSON-bibliotek med ett alternativ för indrag. I JavaScript:
1const formatted = JSON.stringify(JSON.parse(rawJson), null, 2);
2I Python:
1import json
2formatted = json.dumps(json.loads(raw_json), indent=2)
3Båda metoderna tolkar texten till en inbyggd datastruktur och serialiserar den sedan på nytt med mellanrum. Det är enkelt att skriva, men talen kan ändras. JavaScript lagrar varje tal som ett flyttal med dubbel precision, så 9007199254740993 kommer tillbaka som 9007199254740992. Python behåller heltal exakt, eftersom Python-heltal inte har någon storleksgräns, men skriver ändå om 1.0e2 till 100.0 och omvandlar 1e999 till Infinity, vilket inte är giltig JSON. Program som behöver exakta stora heltal, till exempel databas-ID:n, lagrar dem ofta som strängar i JSON i stället för som tal.
En kort historik över JSON
Douglas Crockford specificerade JSON i början av 2000-talet och hämtade syntaxen från JavaScript-objektliteraler, men gjorde den användbar från vilket språk som helst. RFC 4627 formaliserade formatet 2006. Det spreds snabbt eftersom det var kortare att skriva än XML och direkt kunde avbildas på JavaScript-objekt, vilket blev viktigt när webbapplikationer började hämta data i bakgrunden i stället för att läsa in hela sidor på nytt. Vid 2010-talet hade det blivit standardformatet för REST-API:er och databaser som MongoDB.
Vanliga frågor och svar
Vad är en JSON-formaterare? Ett verktyg som lägger till indrag, radbrytningar och mellanrum i JSON-text så att strukturen blir lätt att läsa utan att ändra datan.
Ändrar formatering datan? Nej. Formateringen ändrar bara blanksteg. Det här verktyget kopierar varje sträng och varje tal exakt som de skrevs, så att värdena i resultatet överensstämmer exakt med inmatningen, även tal som är för stora för att lagras exakt som JavaScript-tal.
Varför får jag felet ”Invalid JSON”? Inmatningen bryter mot en JSON-regel. Vanliga orsaker är egenskapsnamn utan citationstecken, ett avslutande kommatecken, enkla citationstecken, en oavslutad sträng eller felaktigt matchade parenteser. Det här verktyget visar inte den exakta teckenpositionen för problemet; genom att kontrollera inmatningen mot reglerna ovan hittar man det vanligtvis snabbt.
Kan JSON innehålla kommentarer? Nej. Specifikationen tillåter inte kommentarer. Format som JSONC och JSON5 lägger till stöd för kommentarer ovanpå JSON-syntaxen när det är användbart, till exempel i konfigurationsfiler.
Vilket är standardindraget i JSON? Två blanksteg är den vanligaste konventionen inom webbutveckling och är det som det här verktyget använder. Vissa stilguider använder i stället fyra blanksteg eller tabbar; själva JSON-specifikationen kräver inget särskilt indrag.
Vad är skillnaden mellan JSON.parse() och JSON.stringify()?
JSON.parse() omvandlar en JSON-sträng till ett JavaScript-värde. JSON.stringify() gör det omvända: omvandlar ett JavaScript-värde till en JSON-sträng och accepterar ett indrag som argument för pretty printing. Det här verktyget använder ingen av funktionerna internt, vilket gör att det kan bevara stora heltal exakt.