Převod CSV na JSON a zpět bez poškození dat
CSV je prostá textová tabulka: jeden záznam na řádek, pole oddělená oddělovačem, obvykle čárkou. Rozbije se, když pole obsahuje oddělovač, dvojitou uvozovku nebo zalomení řádku, protože čtenář musí rozlišit strukturu od obsahu. Dodržte pravidla pro uvozovky, zkontrolujte oddělovač a řádek se záhlavím a čísla s úvodními nulami nechte jako text. Zbytek článku popisuje, co může převod tam a zpět zachovat a co ne.
Převod CSV na JSONPotřebuji CSV jako JSON, nebo zpětVyzkoušet zdarmaCo ve skutečnosti představuje soubor CSV
CSV nemá jediný závazný standard, ale RFC 4180 popisuje běžnou podobu, kterou většina čtečků dodržuje. Jeho základní pravidla se vejdou do krátkého seznamu:
- Každý záznam je na samostatném řádku a RFC uvádí, že řádky končí návratem vozíku a posunem řádku, CRLF.
- Pole jsou oddělena čárkami.
- Pole, které obsahuje čárku, dvojitou uvozovku nebo zalomení řádku, se uzavře do dvojitých uvozovek.
- Dvojitá uvozovka uvnitř uzavřeného pole se zapíše jako dvě dvojité uvozovky.
Řádek 1001,"Smith, Ann",02134 má tedy tři pole, protože čárka uvnitř uvozovek je obsah. Dělička, která řeže na každé čárce, jich najde čtyři. Čtečka fixmint tato pravidla uplatňuje: uzavřené pole může obsahovat oddělovač, zalomení řádků i zdvojené uvozovky a neuzavřená uvozovka se nahlásí s číslem řádku, kde začíná.
Proč se oddělovač mění
Čárka je výchozí oddělovač podle RFC, ale tam, kde je čárka desetinná značka, takže 1,5 znamená jedna a půl, tabulkové procesory často ukládají CSV se středníky. Soubory oddělené tabulátory (TSV) tento konflikt většinou obejdou, protože tabulátory se v textu objevují zřídka.
Nabídka Oddělovač nabízí Automaticky, Čárka, Středník, Tabulátor a Svislá čára. Automatický režim načte prvních deset řádků, u každého kandidáta spočítá výskyty mimo uvozovky a vybere ten, jehož počet na řádek je nejkonzistentnější. Pokud automatika odhadne špatně, zvolte oddělovač ručně.
Převod ve fixmint
Příklad používá výchozí nastavení nástroje Převod CSV na JSON.
Ukázka
Vložte toto CSV se zaškrtnutou volbou První řádek je záhlaví:
id,name,zip,note
1001,"Smith, Ann",02134,"She said ""hi"""
1002,Bo,10001,"line one
line two"
Při vypnuté volbě Převádět čísla a odsazení JSON nastaveném na 2 mezery nástroj vrátí:
[
{
"id": "1001",
"name": "Smith, Ann",
"zip": "02134",
"note": "She said \"hi\""
},
{
"id": "1002",
"name": "Bo",
"zip": "10001",
"note": "line one\nline two"
}
]
Při zapnuté volbě Převádět čísla se id a zip 10001 změní na čísla, zatímco 02134 zůstane textem.
Postup
- Vložte CSV nebo přetáhněte soubor .csv, .tsv, .txt nebo .json.
- Zkontrolujte volby První řádek je záhlaví, Oddělovač a Převádět čísla. Zvolte odsazení JSON 2 mezery, Tabulátor nebo Minifikovat.
- Zkopírujte výsledek nebo jej stáhněte jako .json.
Čísla nechte jako text
Čísla v JSON nemohou mít úvodní nuly, takže 02134 není platné číslo JSON. PSČ, telefonní čísla a kódy produktů musí zůstat textem, jinak nula zmizí. Při zapnuté volbě Převádět čísla nástroj převede 10001, ale 02134 ponechá jako řetězec. Volba je ve výchozím nastavení vypnutá. Převádí pouze hodnoty s tečkou jako desetinnou značkou, takže 1,5 v souboru se středníky zůstane tak, jak bylo napsáno.
Pozor je třeba také u dlouhých identifikátorů. JavaScript, který běží ve většině prohlížečových JSON nástrojů, ukládá čísla jako 64bitová čísla s plovoucí řádovou čárkou. Celá čísla jsou přesná jen do 9 007 199 254 740 991, což je dva na mocninu 53 minus 1. Číslo 12345678901234567890 se při načtení v programu JavaScript změní na 12345678901234567000. Nástroj zapisuje číslice tak, jak byly zadány, ale program, který JSON parsuje v JavaScriptu, je zaokrouhlí. Identifikátory proto držte jako řetězce. Formátovač JSON zachovává taková čísla také přesně tak, jak byla zadána, a řekne, kolik jich zachoval.
Vnořený JSON a návrat k CSV
CSV je ploché, kdežto JSON umí vnořovat. Převod JSON na CSV vytvoří jeden sloupec pro každý klíč napříč všemi objekty, v pořadí, v jakém se klíč poprvé objeví. Vnořený objekt nebo seznam se zapíše do buňky jako text JSON, null se změní na prázdnou buňku a true a false se zapíší jako slova. Řádky jsou spojeny pomocí CRLF a pole se uzavře do uvozovek jen tehdy, když obsahuje oddělovač, uvozovku, zalomení řádku nebo mezery na některém z konců.
Vstup, který začíná znakem [ nebo {, se čte jako JSON. Tlačítko se šipkami přepíná směr a je popsáno jako CSV → JSON nebo JSON → CSV. Ve směru JSON → CSV zobrazují volby výstupu nabídku Oddělovač a volbu Pro Excel.
Obousměrný převod ztrácí informace. Null i prázdný řetězec se změní na prázdnou buňku a vnoření se zpět neobnoví, takže pokud potřebujete zachovat strukturu, uschovejte původní JSON.
Excel, UTF-8 a značka pořadí bajtů
Soubor CSV je tvořen bajty a čtečka musí znát kódování. UTF-8 pojme české znaky i jiné abecedy. Značka pořadí bajtů (BOM), tři bajty na začátku souboru, označuje soubor jako UTF-8. Bez ní některé tabulkové programy čtou soubor v místní kódové stránce a písmena s diakritikou se změní na podivné znaky. Tabulkové procesory také při otevření CSV často změní 02134 na 2134.
Volba Pro Excel přidá značku BOM pouze ke staženému souboru CSV, nikdy ke zkopírovanému textu, a to jen ve směru JSON → CSV. Čtečka značku BOM ze vstupu odstraní, takže soubor, který ji již obsahuje, se převede bez chyby.
Okrajové případy
- Nerovnoměrné řádky. Při zapnutém záhlaví se krátký řádek doplní prázdnými hodnotami a delší řádek si zachová přebytečné hodnoty jako column_N. Výsledek uvádí, kolik řádků se liší od záhlaví.
- Opakující se nebo prázdná záhlaví. Opakovaný název dostane příponu _2, _3 a tak dále, prázdný název se změní na column_N. Obě úpravy zabrání tomu, aby se dva klíče přepisovaly.
- Typografické uvozovky. Uvozovky z textového editoru nejsou uvozovky CSV, takže se pole jako „Smith, Ann“ rozdělí na čárce. Nejdřív je zjednodušte pomocí opravy vloženého textu nebo postupem z průvodce typografickými uvozovkami.
- Zalomení řádků uvnitř uvozovek. Pole přes dva řádky je jeden záznam, ale odstranění duplicitních řádků rozdělí vstup na každém zalomení řádku, takže obě poloviny vyhodnotí jako samostatné řádky. Převeďte na JSON a porovnejte objekty, nebo zkontrolujte ručně. Nástroj zůstane užitečný pro seznamy s jednou hodnotou na řádek.
- Velké soubory. Výsledkové pole zobrazuje prvních 100 000 znaků, ale Kopírovat i stažení obsahují celý výstup.
- Neplatný JSON. Převodník nahlásí řádek a sloupec chyby se stříškou pod znakem. Formátovač JSON vysvětluje běžné překlepy a průvodce chybami v JSONu je probírá podrobněji.
Nadbytečné mezery kolem polí, prázdné řádky uprostřed souboru a nekonzistentně použité uvozovky způsobí většinu potíží s CSV ještě dříve, než na řadu přijde oddělovač. Nejprve vyčistěte CSV a pak je převeďte.
Přeloženo z Anglický originál s pomocí AI.
Komentáře
Zatím žádné komentáře. Buďte první.


