Konwerter JSON na SQL
Tablica JSON → CREATE TABLE i INSERT dla MySQL, PostgreSQL i SQLite
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Tablica obiektów, pojedynczy obiekt albo JSON Lines (obiekt w każdej linii). Dane są przetwarzane tylko w bieżącym żądaniu i nie są zapisywane.
Wierszy
Kolumn
Instrukcji INSERT
po jednej na wiersz
Rozmiar SQL
SQL dla MySQL
| Kolumna | Typ SQL | Puste (NULL) |
|---|---|---|
| id | INT | 0 |
| name | VARCHAR(255) | 0 |
| VARCHAR(255) | 0 | |
| active | TINYINT(1) | 0 |
Typy są wnioskowane z wartości w danych. Sprawdź je przed uruchomieniem na produkcji, a w aplikacji nie sklejaj zapytań z danych użytkownika, tylko używaj zapytań parametryzowanych.
Jak JSON zamienia się w typy i wartości SQL
| Wartość w JSON | MySQL | PostgreSQL | SQLite |
|---|---|---|---|
| liczba całkowita (do 2 147 483 647) | INT | INT | INTEGER |
| liczba całkowita większa | BIGINT | BIGINT | INTEGER |
| liczba z ułamkiem | DECIMAL(12,2), a przy dłuższym ułamku szerszy | DECIMAL(12,2), a przy dłuższym ułamku szerszy | REAL |
| true / false | TINYINT(1): 1 / 0 | BOOLEAN: TRUE / FALSE | INTEGER: 1 / 0 |
| tekst, data, liczba w cudzysłowie | VARCHAR(255), powyżej 255 bajtów TEXT | VARCHAR(255), powyżej 255 bajtów TEXT | TEXT |
| zagnieżdżony obiekt lub lista | tekst z zapisem JSON | tekst z zapisem JSON | tekst z zapisem JSON |
| null | NULL | NULL | NULL |
Jak dobieramy typ kolumny
Narzędzie sprawdza wszystkie wiersze kolumny, nie tylko pierwszy. Liczby i tekst w jednej kolumnie dają typ tekstowy, brakujące klucze dają NULL, a kolejność kolumn wynika z pierwszego wystąpienia klucza. Twoje dane: 2 wierszy i 4 kolumn, czyli 2 instrukcji INSERT.
Apostrofy i backslash
Apostrof w tekście jest podwajany, więc O'Brien trafia do bazy jako 'O''Brien'. W MySQL podwajany jest też backslash, bo tam służy jako znak ucieczki. Ucieczka chroni skrypt wklejany ręcznie, ale w kodzie aplikacji i tak używaj zapytań parametryzowanych.
Typowe pułapki
Daty zostają tekstem, więc zmień typ na DATE lub TIMESTAMP ręcznie. Liczby w cudzysłowie, jak "007", zostają tekstem, żeby nie stracić zer. Zagnieżdżone obiekty trafiają do kolumny jako tekst JSON. Nazwa tabeli może mieć tylko litery A-Z, cyfry i podkreślnik.
Co możesz wkleić
Tablicę obiektów, pojedynczy obiekt (jeden wiersz) albo JSON Lines. Obiekty rozdzielone przecinkami bez nawiasów [ ] też zadziałają. Elementy, które nie są obiektami, są pomijane. Limity: 5 000 wierszy i 500 KB danych.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćKonwerter JSON na SQL
Wklej tablicę obiektów JSON, a konwerter JSON na SQL wygeneruje gotowe instrukcje INSERT (opcjonalnie z CREATE TABLE) w dialekcie MySQL, PostgreSQL albo SQLite. Wynik kopiujesz jednym przyciskiem lub pobierasz jako plik .sql nazwany tak jak tabela.
Wnioskowanie typów
| Wartość JSON | MySQL | PostgreSQL | SQLite |
|---|---|---|---|
| liczba całkowita (do 2 147 483 647) | INT | INT | INTEGER |
| większa liczba całkowita | BIGINT | BIGINT | INTEGER |
| liczba zmiennoprzecinkowa | DECIMAL(12,2) lub szerszy | DECIMAL(12,2) lub szerszy | REAL |
| tekst do 255 bajtów | VARCHAR(255) | VARCHAR(255) | TEXT |
| tekst dłuższy niż 255 bajtów | TEXT | TEXT | TEXT |
| true / false | TINYINT(1) | BOOLEAN | INTEGER |
Przykład
[
{"id":1,"name":"Anna","active":true},
{"id":2,"name":"Jan","active":false}
]
Daje w MySQL (tabela users, po jednym INSERT na wiersz):
INSERT INTO `users` (`id`, `name`, `active`) VALUES (1, 'Anna', 1);
INSERT INTO `users` (`id`, `name`, `active`) VALUES (2, 'Jan', 0);
Po przełączeniu na PostgreSQL nazwy trafiają w cudzysłowy, a wartości logiczne zostają logiczne: INSERT INTO "users" ("id", "name", "active") VALUES (1, 'Anna', TRUE);
Jak działa konwerter JSON na SQL
Narzędzie czyta wklejone dane i traktuje je jak zbiór rekordów: każdy obiekt to jeden wiersz, a każdy klucz pierwszego poziomu to jedna kolumna. Przyjmuje tablicę obiektów, pojedynczy obiekt (jeden wiersz), JSON Lines (obiekt w każdej linii) oraz obiekty rozdzielone przecinkami bez nawiasów [ ]. Najpierw skanuje wszystkie obiekty i buduje unię kluczy: kolumna powstaje wtedy, gdy klucz pojawi się choćby w jednym obiekcie. Kolejność kolumn odpowiada kolejności pierwszego wystąpienia klucza, dlatego układ pól w pierwszym obiekcie przesądza o kształcie zapytania.
Drugi etap to wnioskowanie typu osobno dla każdej kolumny, na podstawie wszystkich jej wartości, a nie tylko pierwszego wiersza. Dla ułamków skala wynosi co najmniej 2, a rośnie, gdy dane mają więcej miejsc po przecinku: 0.125 daje DECIMAL(12,3). Precyzja to co najmniej 12 cyfr łącznie; liczba z 11 cyframi przed przecinkiem podniesie ją do DECIMAL(13,2). Przy zapisie wykładniczym (np. 1.5e-7) albo precyzji powyżej 38 kolumna dostaje DOUBLE (w PostgreSQL DOUBLE PRECISION). Liczby całkowite w tej samej kolumnie co ułamki nie zmieniają typu na tekst, kolumna zostaje DECIMAL.
Trzeci etap to złożenie zapytania. Teksty trafiają w apostrofy, a apostrof wewnątrz tekstu jest podwajany; w MySQL podwajany jest też backslash. Wartości logiczne w MySQL i SQLite stają się 1 i 0, w PostgreSQL TRUE i FALSE. Zarówno null, jak i brak klucza w obiekcie dają NULL. W trybie „Jedno zbiorcze INSERT” wszystkie wiersze lądują w jednej instrukcji jako kolejne krotki VALUES, co skraca skrypt i czas wstawiania. Pod wynikiem widać liczbę wierszy, kolumn i instrukcji, rozmiar skryptu oraz uwagi do konwersji, np. o wierszach z brakującymi kluczami.
Przykład krok po kroku
- Dane wejściowe to tablica trzech obiektów: [{"id":1,"name":"Anna","cena":19.9,"active":true}, {"id":2,"name":"O'Neill","cena":5,"active":false}, {"id":3,"name":"Jan","active":true}]. Liczba obiektów wyznacza liczbę wierszy, czyli 3.
- Unia kluczy daje 4 kolumny: id, name, cena oraz active. Klucz cena występuje tylko w 2 z 3 obiektów, więc w trzecim wierszu przyjmie wartość NULL, a narzędzie zgłosi to w uwagach.
- Typy kolumn w MySQL: id to liczby całkowite, więc INT; name to tekst, więc VARCHAR(255); cena zawiera 19.9 (jedno miejsce po przecinku) oraz 5, więc cała kolumna dostaje DECIMAL(12,2); active to wartości logiczne, więc TINYINT(1).
- Zapis wartości: liczby zostają w najkrótszej postaci (19.9 i 5, zaokrąglenie do 19.90 i 5.00 robi dopiero baza w kolumnie DECIMAL), true daje 1, false daje 0, a apostrof w nazwisku O'Neill jest podwajany do 'O''Neill'.
- Tryb zbiorczy składa wszystko w jedną instrukcję:
INSERT INTO `users` (`id`, `name`, `cena`, `active`) VALUES (1, 'Anna', 19.9, 1), (2, 'O''Neill', 5, 0), (3, 'Jan', NULL, 1); - Z zaznaczonym CREATE TABLE i opcją „Klucz główny na kolumnie id” przed INSERT pojawi się definicja z
`id` INT PRIMARY KEY, bo id zawiera unikalne liczby całkowite bez pustych wartości. Kontrola: 3 obiekty dały 3 krotki, 4 klucze dały 4 kolumny, 1 brakująca wartość dała 1 NULL.
Zapis wartości – tabela referencyjna
| Wartość w JSON | MySQL | PostgreSQL | SQLite |
|---|---|---|---|
| 1, -25 | 1, -25 | 1, -25 | 1, -25 |
| 19.9 | 19.9 | 19.9 | 19.9 |
| true / false | 1 / 0 | TRUE / FALSE | 1 / 0 |
| "O'Neill" | 'O''Neill' | 'O''Neill' | 'O''Neill' |
| "C:\\temp" | 'C:\\temp' | 'C:\temp' | 'C:\temp' |
| "007" | '007' | '007' | '007' |
| ["vip","pilne"] | '["vip","pilne"]' | '["vip","pilne"]' | '["vip","pilne"]' |
| null lub brak klucza | NULL | NULL | NULL |
| nazwa tabeli i kolumn | `users` | "users" | "users" |
Praktyczne wskazówki przed importem
- Ustaw nazwę tabeli i sprawdź nazwy kolumn: nazwa tabeli nie wynika z JSON-a, więc podajesz ją ręcznie. Może zawierać tylko litery A-Z, cyfry i podkreślnik; inne znaki są usuwane, a narzędzie pokazuje, jakiej nazwy użyło. Klucze JSON trafiają do zapytania w cudzysłowach, ale spacje, myślniki i polskie znaki w nazwach kolumn utrudniają później pisanie zapytań.
- Sprawdź unię kluczy przed skopiowaniem wyniku. Jeśli obiekty mają różne zestawy pól, kolumn będzie tyle, ile różnych kluczy w całej tablicy, a nie w pierwszym obiekcie. Brakujące wartości nie znikną, pojawią się jako NULL.
- Trzymaj jedną klasę wartości na kolumnę. Gdy w polu id trafią się raz liczby, a raz teksty (albo liczby i true/false), kolumna dostanie VARCHAR(255) i straci typ liczbowy.
- Kolumna, w której są same
null, dostaje typ domyślny INT. Narzędzie ostrzega o tym w uwagach, a właściwy typ dobierasz ręcznie. - Dziel duże wsady na partie. Pojedynczy INSERT z bardzo dużą liczbą krotek może przekroczyć limit pakietu po stronie serwera (w MySQL
max_allowed_packet). Samo narzędzie przyjmuje do 5 000 wierszy i 500 KB danych. - Zachowaj oryginalny JSON, żeby po korekcie danych powtórzyć konwersję i porównać oba wyniki.
Ograniczenia narzędzia
- Tylko klucze pierwszego poziomu: zagnieżdżone obiekty i tablice nie są rozkładane na osobne tabele ani relacje. Trafiają do kolumny jako tekst z zapisem JSON, który możesz potem przenieść do typu JSON lub JSONB albo znormalizować.
- Klucz główny jest opcjonalny i działa tylko dla kolumny id z unikalnymi liczbami całkowitymi. Narzędzie nie generuje kluczy obcych (REFERENCES, ON DELETE), UNIQUE, NOT NULL ani indeksów.
- Daty zostają tekstem: data zapisana w JSON jako łańcuch znaków trafi do kolumny VARCHAR, a nie DATE lub TIMESTAMP. Typ zmień w CREATE TABLE albo już w bazie, po imporcie.
- Brak weryfikacji ze schematem docelowym: narzędzie nie zna istniejącej tabeli, więc nie sprawdzi zgodności nazw ani typów kolumn. Porównanie wyniku z rzeczywistym schematem należy do Ciebie.
Najczęstsze pytania
Jak przekonwertować JSON na INSERT SQL?
Wklej tablicę obiektów JSON, podaj nazwę tabeli, wybierz dialekt i zdecyduj, czy chcesz CREATE TABLE oraz jedno zbiorcze INSERT. Wynik skopiujesz albo pobierzesz jako plik .sql i wykonasz w kliencie bazy.
Czy konwerter działa z PostgreSQL i SQLite?
Tak, dialekt wybierasz z listy. PostgreSQL dostaje BOOLEAN z wartościami TRUE/FALSE i nazwy w cudzysłowach, SQLite typy INTEGER, REAL i TEXT.
Jaki format JSON jest wymagany?
Najlepiej tablica obiektów, ale zadziała też pojedynczy obiekt i JSON Lines. Przy błędzie składni narzędzie podaje linię, kolumnę i powód, np. przecinek po ostatnim polu albo apostrofy zamiast cudzysłowów.
Po co tryb zbiorczy?
Jeden INSERT ... VALUES (...), (...) baza wykonuje szybciej niż setki osobnych instrukcji, a skrypt jest krótszy.
Czy dane są bezpieczne?
Dane są przetwarzane tylko w bieżącym żądaniu i nie są zapisywane. Apostrofy w tekstach są podwajane, ale w kodzie aplikacji używaj zapytań parametryzowanych zamiast sklejania SQL z danych użytkownika.
Dlaczego kolumna z ułamkami ma typ DECIMAL(12,2)?
To minimalny typ dla ułamków: 12 cyfr łącznie, 2 po przecinku. Gdy dane mają więcej miejsc po przecinku lub więcej cyfr, skala i precyzja rosną, np. 0.125 daje DECIMAL(12,3).