Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Konwerter JSON na SQL

Tablica JSON → CREATE TABLE i INSERT dla MySQL, PostgreSQL i SQLite

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  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

2

Kolumn

4

Instrukcji INSERT

2

po jednej na wiersz

Rozmiar SQL

300 B

SQL dla MySQL

CREATE TABLE `users` ( `id` INT, `name` VARCHAR(255), `email` VARCHAR(255), `active` TINYINT(1) ); INSERT INTO `users` (`id`, `name`, `email`, `active`) VALUES (1, 'Anna', '[email protected]', 1); INSERT INTO `users` (`id`, `name`, `email`, `active`) VALUES (2, 'Jan', '[email protected]', 0);
300 znaków · 37 słów · 10 linii
Wnioskowane kolumny i typy
KolumnaTyp SQLPuste (NULL)
id INT 0
name VARCHAR(255) 0
email 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

Typ kolumny dobierany do wartości JSON
Wartość w JSONMySQLPostgreSQLSQLite
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ść JSONMySQLPostgreSQLSQLite
liczba całkowita (do 2 147 483 647)INTINTINTEGER
większa liczba całkowitaBIGINTBIGINTINTEGER
liczba zmiennoprzecinkowaDECIMAL(12,2) lub szerszyDECIMAL(12,2) lub szerszyREAL
tekst do 255 bajtówVARCHAR(255)VARCHAR(255)TEXT
tekst dłuższy niż 255 bajtówTEXTTEXTTEXT
true / falseTINYINT(1)BOOLEANINTEGER

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

  1. 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.
  2. 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.
  3. 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).
  4. 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'.
  5. 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);
  6. 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 JSONMySQLPostgreSQLSQLite
1, -251, -251, -251, -25
19.919.919.919.9
true / false1 / 0TRUE / FALSE1 / 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 kluczaNULLNULLNULL
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).

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!