Шта ова алатка ради и по чему се разликује од сродних конверзија
Алатка за претварање JSON‑а у CSV омогућава да отпремите (или превучете) JSON датотеку и добијете CSV датотеку са изабраним раздељивачем — зарезом, тачком‑зарезом или табулатором. Сва обрада се одвија у вашем прегледачу; ни један једини бајт не напушта ваш рачунар. Иако на први поглед личи на друге конверзије попут Excel‑у‑CSV или JSON‑у‑Excel, овај смер је фундаментално другачији зато што спљоштава (flattening) хијерархијски, типизирани формат у раван, нетипизирани скуп редова и колона. CSV нема објекте, низове, бројеве, булове ни null; у CSV‑у постоје само текстуалне вредности раздвојене задатим знаком. Док конверзија Excel‑у‑JSON чува структуру радне свеске (листови, редови, формуле), а конверзија CSV‑у‑Excel само мења контејнер, прелазак из JSON‑а у CSV захтева да се одлучи како да се угнеждени подаци представе у равном облику. Резултат је губитак свих информација о типу, дубини угнежђења, могућим листовима (којих у JSON‑у ионако нема) и форматирању. У пракси то значи да број 1024 постаје текст "1024", логичка вредност true постаје "true", а null постаје празно поље или текст "null".
Како се JSON спљоштава у равну табелу
Да би се JSON могао приказати као CSV, потребно је да буде табеларно обликован. Алатка прихвата две врсте улаза: низ објеката ([{...}, {...},...]) и низ низова ([[...], [...],...]). Ако је JSON облика {"key": value} или ако садржи мешовите структуре без правилног понављања, приказаће се грешка: „This JSON is invalid or not table‑shaped.”
Када се ради о низу објеката, сваки објекат постаје један ред, а кључеви објеката постају колоне. Проблем настаје када објекти садрже угнежђене објекте или низове. Да би се та хијерархија представила у равном CSV‑у, алатка користи dot‑path нотацију. На пример, ако JSON изгледа овако:
[
{
"name": "Petar",
"address": {
"city": "Beograd",
"street": "Knez Mihailova"
}
}
]
тада у CSV‑у добијате колоне name, address.city и address.street. Свака тачка у називу колоне означава пролазак кроз један ниво угнежђења. Ова нотација је довољно јасна за већину случајева, али ако JSON садржи низове објеката, сваки елемент низа постаје посебан ред, а кључеви се и даље спљоштавају. На пример, низ адреса у оквиру једне особе произвешће онолико редова колико има адреса, уз понављање осталих података о особи. Низови који нису низови објеката (нпр. низ бројева) третирају се као вредности једне колоне; алатка их не „развлачи” у засебне колоне. Ако је JSON низ низова, онда сваки унутрашњи низ постаје ред, а елементи низа постају колоне без именовања — CSV колоне се једноставно нумеришу.
Раздељивачи, цитирање и губитак водећих нула
CSV није стандардизован на исти начин као JSON; постоје варијанте са различитим раздељивачима. Алатка нуди три опције: зарез (,), тачку‑зарез (;) и табулатор (\t). Избор зависи од локалних поставки програма у који ћете увозити CSV. У Excel‑у за подручје Србије стандардно се користи тачка‑зарез, док је у енглеским верзијама то зарез. Ако одаберете погрешан раздељивач, подаци ће се приказати у једној колони или ће се преломити на погрешним местима.
Због тога што CSV користи раздељивач, све вредности које садрже тај знак, знак за нови ред или наводнике морају бити стављене под наводнике. Алатка то ради аутоматски, примењујући уобичајена правила: вредност се ставља под двоструке наводнике, а сви постојећи наводници унутар вредности дуплирају. Ово је транспарентно за корисника — само преузмете датотеку спремну за увоз.
Међутим, постоји проблем са водећим нулама. JSON бројеви не чувају водеће нуле; 012 се у JSON‑у тумачи као 12 (осим ако је стринг, али ако је број, губи се нула). Приликом конверзије у CSV, алатка претвара све вредности у текст, али ако је улазни JSON имао број 012, он ће постати 12 у CSV‑у. Ако су вам потребне водеће нуле (нпр. за поштанске бројеве или матичне бројеве), морате се побринути да у JSON‑у буду представљени као стрингови, а не као бројеви. Алатка не може да поврати изгубљене нуле.
Ограничења, грешке и провере
Због практичних разлога (преоптерећење прегледача, меморија, време обраде) алатка има уграђена ограничења. Ако датотека премашује максималну величину, појављује се порука: „This file is too large. Use a file under ‹max›.” Тачна вредност ‹max› зависи од верзије алатке, али су границе постављене тако да конверзија остане употребљива на већини савремених уређаја. Слично, ограничен је и број редова и колона. Ако табела има више од максималног броја редова, грешка гласи: „This table has more than ‹max› rows.” Иста логика важи и за колоне. Прекорачење се проверава пре саме конверзије, па нећете чекати да обрада падне на пола пута.
Остале грешке покривају уобичајене грешке корисника: ако нисте изабрали ниједну датотеку — „Choose one file first.”; ако изабрана датотека није CSV, JSON или XLSX — „Choose a CSV, JSON or XLSX file.”; ако сте променили циљни формат али он није CSV (пошто је страница намењена само том формату) — „Choose a different output format.”; ако конверзија не успе из неког разлога — „Could not convert this file.”; ако је откажете — „Conversion cancelled.”; ако траје предуго за велику датотеку — „This conversion is taking too long. Try a smaller file.”
Важно је запамтити да алатка не чува типове података — све постаје стринг. Чак и null постаје или празно поље или текст „null” у зависности од имплементације. Булови true и false постају ниске. Ниједан JSON тип не опстаје.
Приватност: зашто је обрада на клијентској страни битна
С обзиром на то да се конверзија одвија искључиво у вашем прегледачу (client‑side), подаци никада не напуштају ваш уређај. Ово је кључно за рад са осетљивим подацима — API одговори који садрже личне информације, интерни пословни JSON фајлови, или било који подаци за чији пренос преко мреже не желите да бринете. Не постоји сервер на који се датотека отпрема; JavaScript у прегледачу директно чита фајл, обрађује га и генерише нови CSV за преузимање. Чак ни привремена копија не одлази на сервер. Ово је у супротности са многим online конвертерима који захтевају отпремање на сервер, где подаци могу бити пресретнути, задржани или коришћени без вашег знања.
Међутим, овакав приступ има и последице: велике датотеке (реда десетина мегабајта) могу да успоре рад прегледача или да доведу до грешке „This conversion is taking too long.” Зато је максимална величина датотеке ограничена. Ако радите са огромним JSON фајловима (нпр. са више од милион редова), вероватно ћете морати да их поделите на мање делове.
Када је ова конверзија потребна
Најчешћи корисници су програмери који ваде податке из API‑ја и треба да их учитају у Excel, Google Sheets или базу података која очекује CSV фид. На пример, добијете JSON са списком наруџбина, са угнежденим адресама и ставкама. Уместо да ручно пишете скрипту за спљоштавање, ова алатка то уради за трен ока. Друга група су корисници који се баве анализом података — треба им табела за даљу обраду, а JSON им је доступан из система. Такође, због приватности, овај метод је идеалан за организације које не дозвољавају отпремање података на спољне сервере.
С обзиром на губитак типова и хијерархије, препоручује се да пре конверзије проверите да ли је JSON заиста табеларно обликован. Увек можете да прегледате преглед табеле пре него што преузмете датотеку — алатка приказује број редова и колона, величину излазне датотеке и сам садржај. Ако видите неочекиване колоне (нпр. address.city уместо grad), знате да треба да прилагодите структуру JSON‑а пре конверзије.
ЧПП (FAQ)
1. Зашто ми је број 012 постао 12 у CSV‑у?
JSON третира 012 као број, а бројеви не чувају водеће нуле. Да бисте их сачували, морате у JSON‑у да користите стринг: "012". Алатка претвара све вредности у текст, али ако је улаз био број, нула се губи.
2. Да ли се моји подаци отпремају на сервер? Не. Сва обрада се одвија у вашем прегледачу (client‑side). Датотека се не шаље нигде. Можете да искључите интернет и конверзија ће и даље радити.
3. Могу ли да конвертујем JSON са угнежденим низовима објеката?
Да, али запамтите да се низови објеката „развлаче” у више редова. На пример, ако један корисник има три адресе, у CSV‑у ћете добити три реда са истим именом и презименом, али различитим адресама. Кључеви се спајају тачком (нпр. addresses.city).
4. Шта значи грешка „This JSON is invalid or not table‑shaped.”?
Ваш JSON није низ објеката или низ низова. Можда је објекат, низ примитивних вредности, или садржи неконзистентне структуре (нпр. први ред има кључеве a, b, а други има a, c — алатка то не може да обради као табелу).
5. Који је максимални број редова или колона? Ограничења су дефинисана у коду алатке. Ако их прекорачите, добићете поруку са тачним бројем. Величина датотеке је такође ограничена, јер се све обрађује у меморији прегледача.
6. Зашто су ми све вредности постале текст (стринг)?
Зато што CSV нема типове података — све су ниске. Бројеви, булови, null — све се конвертује у текст. Ако желите да задржите типове, користите JSON уместо CSV.