Pular para o conteúdo principal

JSON para SQL INSERT

Este conversor escreve instruções SQL INSERT a partir de um array JSON de registros no seu navegador. Nomes de colunas são entre aspas duplas, strings são escapadas com aspas simples duplicadas, null se torna NULL, e booleanos se tornam TRUE ou FALSE. Os registros devem compartilhar o mesmo conjunto de chaves; nada sai da aba.

Só local

JSON para SQL INSERT: explicação

Dados de teste vivem em JSON — fixtures de API, relatórios exportados, registros de teste —, mas o banco de dados quer instruções INSERT. A conversão é mecânica e vale a pena ser feita com precisão: cada registro se torna uma linha, cada chave se torna uma coluna, e cada valor precisa chegar como um literal SQL tipado corretamente. Erre no escape e a instrução falha imediatamente; erre de forma sutil e ela falha três semanas depois, no primeiro nome com apóstrofo.

Este conversor emite instruções INSERT multi-linha: uma lista de colunas entre aspas duplas, depois um tuple VALUES por registro. Aspas duplas são o padrão SQL para identificadores, e strings com aspas simples têm qualquer aspa embutida duplicada — a forma O''Brien que todo parser compatível lê como uma única aspa literal. Números permanecem nus, true e false se tornam TRUE e FALSE, e JSON null se torna a palavra-chave não entre aspas NULL. Você nomeia a tabela de destino no campo da ferramenta; o exemplo abaixo usa people.

Tudo isso acontece nesta aba do navegador. Seus registros são parseados com o próprio JSON.parse do navegador, o texto SQL é montado na memória, e nenhuma requisição sai da página — o painel Network do DevTools não mostra nada durante uma conversão, e a Content-Security-Policy do site proíbe conexões de saída de qualquer maneira.

Se suas linhas estão em uma exportação de planilha em vez de JSON, o Conversor de CSV para SQL aplica as mesmas regras de aspa em cima de um parser RFC 4180 com inferência de tipo por célula.

O conversor só aceita um array JSON estrito, então se o payload veio de um script ou de um arquivo de log, verifique-o com o Validador de JSON primeiro; o erro que você vê lá é o erro que esta ferramenta levantaria.

Como a conversão realmente funciona

O motor parseia seu JSON com JSON.parse — o parser RFC 8259 do próprio navegador — e então faz três verificações antes de emitir qualquer coisa, porque cada modo de falha produz SQL que é inválido ou errado silenciosamente:

  • Formato: o nível superior deve ser um cujo cada elemento é um objeto; um objeto solto ou um array aninhado é recusado com uma mensagem nomeando o índice ofensor.
  • Chaves consistentes: cada registro deve ter o mesmo conjunto de chaves. Uma instrução INSERT declara uma única lista de colunas, então um registro carregando uma chave que os outros não possuem não tem para onde ir — o conversor relata a chave e a linha em vez de inventar NULLs que você não pediu.
  • Valores planos: objetos e arrays aninhados dentro de um registro não têm equivalente literal SQL simples, então são recusados com o caminho nomeado, em vez de serem transformados em string por trás das suas costas.

O mapeamento literal

Cada valor é renderizado por seu tipo JSON, usando apenas formas SQL padrão:

  • Uma nota de tipografia merece sua própria linha: TRUE e FALSE são literais booleanos padrão SQL, lidos nativamente por PostgreSQL e SQLite e lidos como 1 e 0 por MySQL. Motores sem literais booleanos — colunas BIT do SQL Server, por exemplo — querem 1 e 0 na instrução, então para esses destinos substitua as palavras-chave; as regras de aspa e NULL permanecem exatamente as mesmas.
Valor JSONLiteral SQL
"Ada Lovelace"'Ada Lovelace'
"O'Brien"'O''Brien' — a aspa é duplicada
nullNULL, sem aspas
true / falseTRUE / FALSE
9.59.5, um número nú
[1, 2]Recusado, com o caminho nomeado

Como a saída parece

O exemplo abaixo é o par exato que o botão “Carregar exemplo” do conversor produz para uma tabela chamada people: dois registros, quatro chaves consistentes, e um de cada literal interessante. O nome do segundo registro contém um apóstrofo, e a saída mostra a defesa padrão — a aspa é duplicada, que cada dialeto SQL lê como uma única aspa literal em vez do fim da string. Sua pontuação é null e se torna a palavra-chave NULL, não uma string vazia — a diferença entre uma ausência de medida e uma de comprimento zero. Copie o bloco como está ou baixe-o como um arquivo .sql; de qualquer forma é um script completo e terminado.

Como colocar as instruções no seu banco de dados

A saída é um script completo e terminado: cole em um console SQL, ou salve como um arquivo .sql para um executor de migrações. Para uma carga limpa, envolva em uma transação — BEGIN; antes, COMMIT; depois — para que uma falha no meio do script reverta toda a semente em vez de deixar metade de uma tabela para trás. Como as instruções usam apenas formas SQL padrão, o mesmo arquivo roda sem alterações no PostgreSQL, SQLite e MySQL com ANSI_QUOTES ativado; apenas a nota booleana acima precisa ser tocada para um motor específico.

  • psql: cole no shell interativo, ou execute \i seed.sql a partir do prompt.
  • sqlite3: execute .read seed.sql, ou pipe o arquivo a partir do seu shell.
  • Ferramentas GUI: a maioria das janelas de consulta aceitam o script inteiro como um lote e relatam a contagem de linhas.

Perguntas frequentes

O conversor de JSON para SQL envia meus dados?

Não. O parse e a geração de SQL rodam nesta aba do navegador com JavaScript carregado uma vez na abertura da página. A página não tem endpoint para postar dados, e sua Content-Security-Policy bloqueia requisições de saída. A afirmação é verificável: abra DevTools, mude para o painel Network, converta um arquivo grande, e veja que nenhuma requisição aparece.

Por que nomes de coluna estão entre aspas duplas?

Identificadores entre aspas duplas são o padrão SQL, e é o que protege nomes de coluna que colidem com palavras-chave ou misturam maiúsculas e minúsculas — uma coluna chamada order ou UserName precisa de aspas para sobreviver. PostgreSQL, SQLite e SQL Server aceitam diretamente; MySQL também com o modo ANSI_QUOTES ativado, caso contrário use seu equivalente de crase.

Como aspas simples dentro de strings são escapadas?

Duplicando-as, que é o padrão: o nome O'Brien é emitido como 'O''Brien', e todo parser compatível lê o par como uma única aspa literal. Escape com barra invertida — como em O\'Brien — é uma extensão MySQL e produz um erro de sintaxe ou uma barra invertida solta em qualquer outro lugar, por isso este conversor não emite isso.

O que JSON null se torna no SQL?

A palavra-chave não entre aspas NULL — o próprio marcador SQL de um valor ausente, distinto da string vazia ''. Uma pontuação null significa nenhuma medida foi tomada; uma string vazia significa uma medida de comprimento zero. O conversor preserva essa distinção, porque colapsar as duas é um dos erros mais difíceis de desfazer em uma tabela populada.

Por que cada registro deve ter as mesmas chaves?

Porque uma instrução INSERT declara sua lista de colunas uma vez, e cada tuple VALUES deve preencher exatamente aquelas colunas. Um registro sem uma chave, ou carregando uma extra, não tem lugar definido naquela lista. O conversor relata a chave e o índice da linha ofensores para que você possa normalizar os registros primeiro — preenchendo deliberadamente lacunas com null se esse for o seu intento.

Por que um INSERT multi-linha em vez de uma instrução por linha?

Menos instruções, um parse, e tipicamente uma carga muito mais rápida — um único INSERT multi-linha é a forma que a maioria dos guias de carga em massa recomendam para semear. A saída termina com ponto e vírgula para ser um script completo, e se suas ferramentas preferem uma instrução por linha, cada tuple VALUES fica em sua própria linha, então dividir é uma pequena edição mecânica.