CSV til JSON og tilbage uden at ødelægge data
CSV er en tabel i ren tekst: én post pr. linje, med felter adskilt af et skilletegn, normalt et komma. Den går i stykker, når et felt indeholder skilletegnet, et dobbelt anførselstegn eller et linjeskift, fordi læseren skal kunne skelne struktur fra indhold. Følg reglerne for anførselstegn, kontrollér skilletegn og overskriftsrække, og behold tal med foranstillede nuller som tekst. Resten af artiklen gennemgår, hvad en tur frem og tilbage kan og ikke kan bevare.
CSV til JSONVil have CSV om til JSON, eller omvendtPrøv gratisHvad en CSV-fil egentlig er
CSV har ingen enkelt autoritativ standard, men RFC 4180 beskriver den almindelige form, og de fleste læsere følger den. Kernereglerne kan stå i en kort liste:
- Hver post står på sin egen linje, og RFC'en siger, at linjer slutter med et vognretur (carriage return) og et linjeskift (line feed), altså CRLF.
- Felter adskilles af kommaer.
- Et felt, der indeholder et komma, et dobbelt anførselstegn eller et linjeskift, sættes i dobbelte anførselstegn.
- Et dobbelt anførselstegn inde i et felt i anførselstegn skrives som to dobbelte anførselstegn.
Rækken 1001,"Smith, Ann",02134 har altså tre felter, fordi kommaet inde i anførselstegnene er indhold. En splitter, der deler ved hvert komma, finder fire. fixmint-læseren anvender disse regler: et felt i anførselstegn kan indeholde skilletegnet, linjeskift og dobbelte anførselstegn, og et ikke-lukket anførselstegn rapporteres med linjen, hvor det starter.
Hvorfor skilletegnet ændrer sig
Kommaet er RFC'ens standard, men hvor kommaet er decimaltegn, så 1,5 betyder halvanden, gemmer regneark ofte CSV med semikolon. Tabulatorseparerede filer (TSV) undgår konflikten i de fleste data, fordi tabulatorer sjældent forekommer inde i tekst.
Menuen Skilletegn tilbyder Automatisk, Komma, Semikolon, Tabulator og Lodret streg. Automatisk læser de første ti linjer, tæller hver kandidat uden for anførselstegn og vælger den, hvis antal pr. linje er mest ensartet. Vælg selv skilletegnet, når Automatisk gætter forkert.
Konvertering i fixmint
Eksemplet bruger standardindstillingerne i CSV til JSON-værktøjet.
Gennemregnet eksempel
Indsæt denne CSV, med Første række er en overskrift afkrydset:
id,name,zip,note
1001,"Smith, Ann",02134,"She said ""hi"""
1002,Bo,10001,"line one
line two"
Med Konverter tal fra og JSON-indrykning sat til 2 mellemrum returnerer værktøjet:
[
{
"id": "1001",
"name": "Smith, Ann",
"zip": "02134",
"note": "She said \"hi\""
},
{
"id": "1002",
"name": "Bo",
"zip": "10001",
"note": "line one\nline two"
}
]
Med Konverter tal til bliver id og zip 10001 til tal, og 02134 forbliver tekst.
Trin
- Indsæt CSV'en, eller slip en .csv-, .tsv-, .txt- eller .json-fil her.
- Kontrollér Første række er en overskrift, Skilletegn og Konverter tal. Vælg en JSON-indrykning på 2 mellemrum, Tabulator eller Komprimeret.
- Kopiér resultatet, eller download det som .json.
Behold tal som tekst
JSON-tal må ikke have foranstillede nuller, så 02134 er ikke et gyldigt JSON-tal. Postnumre, telefonnumre og produktkoder skal forblive tekst, ellers forsvinder nullet. Med Konverter tal til konverterer værktøjet 10001, men gemmer 02134 som streng. Indstillingen er fra som standard. Den konverterer kun værdier med punktum som decimaltegn, så 1,5 i en semikolonfil bliver stående, som den er skrevet.
Lange identifikatorer kræver også omtanke. JavaScript, som står bag det meste JSON i browseren, gemmer tal som 64-bit flydende-kommatal. Hele tal er kun præcise op til 9,007,199,254,740,991, som er to opløftet til 53. potens minus 1. Tallet 12345678901234567890 bliver til 12345678901234567000, når et JavaScript-program læser det. Værktøjet skriver cifrene, som de er indtastet, men et program, der læser JSON'en i JavaScript, vil afrunde dem. Gem ID'er som tekst. Formatér JSON bevarer også sådanne tal præcis, som de er skrevet, og fortæller, hvor mange det har bevaret.
Indlejret JSON og tilbage til CSV
CSV er fladt, mens JSON kan indlejres. Når JSON konverteres til CSV, laves én kolonne for hver nøgle på tværs af alle objekterne, i den rækkefølge nøglerne først optræder. Et indlejret objekt eller en liste lægges i cellen som JSON-tekst, en null bliver til en tom celle, og true og false skrives som ord. Rækker sammenføjes med CRLF, og et felt sættes kun i anførselstegn, når det indeholder skilletegnet, et anførselstegn, et linjeskift eller mellemrum i begge ender.
Input, der starter med [ eller { , læses som JSON. Skiftknappen skifter retning og hedder CSV → JSON eller JSON → CSV. I retningen JSON → CSV viser outputindstillingerne en Skilletegn-menu og en Til Excel-indstilling.
En tur frem og tilbage mister information. Både en null og en tom streng bliver til en tom celle, og indlejringen kommer ikke tilbage, så gem den oprindelige JSON, hvis du har brug for dens struktur.
Excel, UTF-8 og byte order mark (BOM)
En CSV-fil er bytes, og læseren skal kende tegnkodningen. UTF-8 kan rumme accenterede bogstaver og andre alfabeter. En BOM, tre bytes i begyndelsen af filen, markerer filen som UTF-8. Uden den læser nogle regneark filen i en lokal kodeside, og accenterede bogstaver bliver til mærkelige tegn. Regneark gør også ofte 02134 til 2134, når de åbner en CSV.
Indstillingen Til Excel tilføjer kun BOM'en til den downloadede CSV, aldrig til den kopierede tekst, og kun i retningen JSON → CSV. Læseren fjerner en BOM fra input, så en fil, der allerede har en, konverteres uden fejl.
Særlige tilfælde
- Uensartede rækker. Med overskrift slået til udfyldes en kort række med tomme værdier, og en længere række beholder sine ekstra værdier som column_N. Resultatet angiver, hvor mange rækker der afviger fra overskriften.
- Gentagne eller tomme overskrifter. Et navn, der gentages, får _2, _3 og så videre, og et tomt navn bliver til column_N. Begge ændringer forhindrer, at to nøgler overskriver hinanden.
- Typografiske anførselstegn. Anførselstegn fra et tekstbehandlingsprogram er ikke CSV-anførselstegn, så et felt som „Smith, Ann“ bliver delt ved kommaet. Ret dem først med Ret indsat tekst eller som beskrevet i guiden om typografiske anførselstegn.
- Linjeskift inde i anførselstegn. Et felt, der spænder over to linjer, er én post, men Fjern dubletlinjer deler sit input ved hvert linjeskift, så den ville behandle de to halvdele som separate rækker. Konvertér til JSON og sammenlign objekterne, eller kontrollér i hånden. Værktøjet er stadig nyttigt til lister med én værdi pr. linje.
- Store filer. Resultatfeltet viser de første 100,000 tegn, men Kopiér og download indeholder hele outputtet.
- Ugyldig JSON. Konverteren angiver linje og kolonne for en fejl med en caret under tegnet. Formatér JSON forklarer de typiske fejl, og guiden om JSON-fejl gennemgår dem mere detaljeret.
Løse mellemrum omkring felter, tomme rækker midt i en fil og anførselstegn, der bruges inkonsekvent, forårsager de fleste CSV-problemer, længe før skilletegnet overhovedet betyder noget. Ryd CSV'en op først, og konvertér derefter.
Oversat fra Engelsk original med AI-hjælp.
Kommentarer
Ingen kommentarer endnu. Vær den første.


