CSV → JSON és vissza adatvesztés nélkül
A CSV egyszerű szöveges táblázat: minden rekord külön sorban áll, a mezőket pedig elválasztó karakter (általában vessző) választja el. Akkor törik el, ha egy mező tartalmazza az elválasztót, a dupla idézőjelet vagy a sortörést, mert az olvasónak meg kell tudnia különböztetni a szerkezetet a tartalomtól. Kövesd az idézési szabályokat, ellenőrizd az elválasztót és a fejlécsort, a vezető nullás számokat pedig tartsd szövegként. A cikk további része azt írja le, mit őriz meg és mit nem egy oda-vissza konvertálás.
CSV → JSON konvertálóCSV-ből JSON, vagy vissza kellPróbáld ki ingyenMi is valójában a CSV-fájl
A CSV-nek nincs egyetlen, mindenki által elfogadott szabványa, de az RFC 4180 a széles körben használt formát írja le, és a legtöbb olvasó ezt követi. Alapszabályai rövid listába férnek:
- Minden rekord a saját sorában áll, az RFC szerint a sorok kocsivissza- és soremelő karakterrel (CRLF) végződnek.
- A mezőket vessző választja el.
- Azt a mezőt, amely vesszőt, dupla idézőjelet vagy sortörést tartalmaz, dupla idézőjelbe kell zárni.
- Az idézőjelek közé zárt mezőn belüli dupla idézőjelet két dupla idézőjellel írjuk.
Így az 1001,"Smith, Ann",02134 sor három mezőből áll, mert az idézőjelek közötti vessző tartalom. Aki minden vesszőnél vág, négy mezőt talál. A fixmint olvasója ezeket a szabályokat alkalmazza: az idézett mező tartalmazhat elválasztót, sortörést és dupla idézőjelet, a le nem zárt idézőjelet pedig a kezdő sor megadásával jelzi.
Miért változik az elválasztó
A vessző az RFC alapértelmezése, de ahol a vessző tizedesjelet is jelöl, így az 1,5 másfelet jelent, a táblázatkezelők gyakran pontosvesszővel mentik a CSV-t. A tabulátorral elválasztott fájlok (TSV) a legtöbb adatnál elkerülik ezt az ütközést, mert a tabulátor ritkán fordul elő szövegben.
Az Elválasztó menüben Automatikus, Vessző, Pontosvessző, Tabulátor és Függőleges vonal közül választhatsz. Az Automatikus az első tíz sort olvassa, minden jelöltet megszámol az idézőjeleken kívül, és azt választja, amelyiknek a sorokban előforduló száma a legegyenletesebb. Ha az Automatikus téved, válaszd ki kézzel az elválasztót.
Konvertálás a fixmintben
A példa a CSV → JSON konvertáló alapértelmezett beállításaival készült.
Kidolgozott példa
Illeszd be ezt a CSV-t, a Az első sor fejléc jelölőnégyzet bepipálva:
id,name,zip,note
1001,"Smith, Ann",02134,"She said ""hi"""
1002,Bo,10001,"line one
line two"
A Számok konvertálása kikapcsolva és a JSON behúzása 2 szóköz beállítással a eszköz ezt adja vissza:
[
{
"id": "1001",
"name": "Smith, Ann",
"zip": "02134",
"note": "She said \"hi\""
},
{
"id": "1002",
"name": "Bo",
"zip": "10001",
"note": "line one\nline two"
}
]
A Számok konvertálása bekapcsolva az id és a zip 10001 számmá alakul, a 02134 pedig szöveg marad.
Lépések
- Illeszd be a CSV-t, vagy húzz ide egy .csv, .tsv, .txt vagy .json fájlt.
- Ellenőrizd az Az első sor fejléc, az Elválasztó és a Számok konvertálása beállítást. A JSON behúzása legyen 2 szóköz, Tabulátor vagy Tömörített.
- Másold ki az eredményt, vagy töltsd le .json fájlként.
Számok szövegként tartása
A JSON-számokban nem lehet vezető nulla, így a 02134 nem érvényes JSON-szám. Az irányítószámokat, telefonszámokat és termékkódokat szövegként kell megtartani, különben a nulla eltűnik. Ha a Számok konvertálása be van kapcsolva, az eszköz a 10001-et átalakítja, a 02134-et viszont szövegként (string) tartja meg. Az opció alapértelmezetten ki van kapcsolva. Csak a tizedespontot használó értékeket alakítja át, így a pontosvesszős fájl 1,5 értéke úgy marad, ahogy be van írva.
A hosszú azonosítókra is figyelni kell. A JavaScript, amely a legtöbb böngészős JSON-kezelést végzi, a számokat 64 bites lebegőpontos értékként tárolja. Az egész számok csak 9 007 199 254 740 991-ig, azaz 2^53 − 1-ig pontosak. A 12345678901234567890 szám JavaScript-programban beolvasva 12345678901234567000 lesz. Az eszköz a számjegyeket úgy írja ki, ahogy be vannak írva, de a JavaScriptben feldolgozó program kerekíteni fogja őket. Az azonosítókat tartsd szövegként. A JSON formázó az ilyen számokat is pontosan megtartja, és megmondja, hányat őrzött meg.
Beágyazott JSON és visszaalakítás CSV-be
A CSV lapos, a JSON viszont egymásba ágyazhat. A JSON → CSV konvertálás minden kulcsból egy oszlopot készít az összes objektumra, abban a sorrendben, ahogy a kulcsok először megjelennek. A beágyazott objektum vagy lista JSON-szövegként kerül a cellába, a null üres cellát ad, a true és a false pedig szóként íródik ki. A sorokat CRLF választja el, és egy mezőt csak akkor tesz idézőjelbe, ha tartalmaz elválasztót, idézőjelet, sortörést, vagy a két végén szóközt.
Az [ vagy { karakterrel kezdődő bemenetet a rendszer JSON-ként olvassa. A gomb, amelyen a CSV → JSON vagy a JSON → CSV felirat áll, megfordítja az irányt. A JSON → CSV irányban a kimeneti beállításoknál megjelenik az Elválasztó menü és a Excelhez opció.
A konvertálás oda-vissza információt veszít. A null és az üres szöveg egyaránt üres cellává válik, a beágyazás pedig nem áll vissza, ezért ha a szerkezetre szükséged van, őrizd meg az eredeti JSON-t.
Excel, UTF-8 és a bájtsorrendi jel
A CSV-fájl bájtokból áll, az olvasónak tudnia kell a kódolást. Az UTF-8 kezeli a magyar ékezetes betűket és más ábécéket is. A bájtsorrendi jel (BOM), a fájl elején álló három bájt, jelzi, hogy a fájl UTF-8. Enélkül egyes táblázatkezelők a helyi kódlapon olvassák a fájlt, és az ékezetes betűk furcsa karakterekké válnak. A táblázatkezelők gyakran a 02134-et is 2134-re alakítják, amikor CSV-t nyitnak meg.
Az Excelhez opció csak a letöltött CSV-hez ad bájtsorrendi jelet, a vágólapra másolt szöveghez soha, és csak a JSON → CSV irányban. Az olvasó a bemenetből eltávolítja a bájtsorrendi jelet, így a már ilyen jelet tartalmazó fájl hiba nélkül konvertálható.
Szélsőséges esetek
- Eltérő hosszúságú sorok. A fejléc bekapcsolt állapotában a rövidebb sort üres értékekkel egészíti ki, a hosszabb sor többletértékei pedig column_N néven maradnak meg. Az eredmény jelzi, hány sor tér el a fejléctől.
- Ismétlődő vagy üres fejlécek. Az ismétlődő nevek _2, _3 stb. végződést kapnak, az üres név pedig column_N lesz. Mindkét változtatás megakadályozza, hogy két kulcs felülírja egymást.
- Görbe idézőjelek. A szövegszerkesztőből származó „okos” idézőjelek nem CSV-idézőjelek, így az olyan mezőt, mint a „Smith, Ann”, a vessző mentén szétválasztja. Előbb a Beillesztett szöveg javítása eszközzel vagy a görbe idézőjelekről szóló útmutató szerint egyenesítsd ki őket.
- Sortörés idézőjelen belül. Az ilyen mező két soron átnyúló egyetlen rekord, de az Ismétlődő sorok törlése eszköz minden sortörésnél szétbontja a bemenetet, így a két felet külön sornak tekinti. Konvertáld JSON-ná, és hasonlítsd össze az objektumokat, vagy ellenőrizd kézzel. Az eszköz soronként egy értéket tartalmazó listáknál továbbra is hasznos.
- Nagy fájlok. Az eredménymező az első 100 000 karaktert mutatja, de a Másolás és a letöltés a teljes kimenetet tartalmazza.
- Érvénytelen JSON. A konvertáló jelzi a hiba sorát és oszlopát, a hibás karakter alatt egy kiemelő jellel. A JSON formázó elmagyarázza a gyakori elírásokat, a JSON-hibákról szóló útmutató pedig részletesebben is leírja őket.
A CSV-problémák többségét a mezők körüli szóközök, a fájl közepén lévő üres sorok és az következetlenül használt idézőjelek okozzák, még mielőtt az elválasztó szerepet játszana. Előbb tisztítsd meg a CSV-t, aztán konvertálj.
A Angol eredeti alapján, MI segítségével fordítva.
Hozzászólások
Még nincs hozzászólás. Legyél te az első.


