O Editor JSON mostra o seu código JSON e os dados em árvore lado a lado. Recolha objetos e arrays, veja o tipo e o número de entradas de cada valor e altere chaves e valores direto na árvore - a alteração vai para o código exatamente naquele lugar, e o resto do arquivo mantém a formatação. Os erros aparecem com linha e coluna, e os dados podem ser validados com um JSON Schema e convertidos para YAML, CSV ou XML.
Tudo roda no seu navegador. Os documentos não são enviados, não há cadastro nem publicidade.
JSON com realce à esquerda, a árvore recolhível no meio. Um clique na árvore pula para o código, o cursor do código marca o valor dele na árvore, e o caminho ($.items[3].name) aparece sempre.
Altere chaves e valores, adicione, duplique, mova e remova entradas, mude um tipo - cada coisa como uma pequena edição do código, um passo para Desfazer.
Uma vírgula ou umas aspas faltando, chaves duplicadas e valores que não batem com o seu JSON Schema, cada um com linha e coluna. JSON com comentários e JSON5 também são lidos.
Busque chaves e valores; cada resultado é marcado na árvore, e Enter vai para o próximo.
Formate, minifique e ordene chaves, ou converta para YAML, CSV (um array de objetos vira uma tabela) e XML. Arquivos YAML, CSV e XML abrem como JSON.
Guarde quantos documentos quiser no seu navegador, cada um com o próprio histórico de desfazer, e baixe todos em um ZIP.
Qualquer página https (e localhost) pode incorporar o editor com um <iframe> e ?embed=1 - sem cadastro, sem chave. Incorporado, o editor oculta este texto e mostra um botão Salvar. Há dois jeitos de levar o documento para dentro e para fora.
src= abre um arquivo (seu servidor precisa permitir CORS), webhook= faz "Salvar" (Ctrl+S) enviar o documento para esse endereço. Acrescente &token=… para um cabeçalho Authorization: Bearer … e &auto para salvar após cada alteração.
<iframe src="https://json.giit.ch/?embed=1&src=https://your-site.com/config/app.json&webhook=https://your-site.com/save.php"
allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>
O webhook recebe um POST com JSON { editor: "json", event: "save", id, name, content, updated }; content é o documento como string. Um pequeno script PHP que o guarda:
<?php
header('Access-Control-Allow-Origin: https://json.giit.ch');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
header('Access-Control-Allow-Methods: POST, OPTIONS');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') exit;
if (($_SERVER['HTTP_AUTHORIZATION'] ?? '') !== 'Bearer SECRET') { http_response_code(403); exit; }
$d = json_decode(file_get_contents('php://input'), true);
$name = preg_replace('/[^\w\- ]/u', '_', $d['name']);
file_put_contents(__DIR__ . "/config/$name.json", $d['content']);
echo '{"ok":true}';
O editor diz jsoneditor:ready, a sua página responde com jsoneditor:load, o editor informa jsoneditor:loaded, jsoneditor:change em edições reais e jsoneditor:save quando o usuário salva. A sua página pode enviar jsoneditor:get (o estado atual) ou jsoneditor:save (apertar Salvar). Salvar passa então pelo seu próprio login e sessão.
<iframe id="ed" src="https://json.giit.ch/?embed=1" allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>
<script>
const ed = document.getElementById('ed');
const ORIGIN = 'https://json.giit.ch';
addEventListener('message', async e => {
if (e.source !== ed.contentWindow || e.origin !== ORIGIN) return;
const m = e.data;
if (m.type === 'jsoneditor:ready') { // o editor está pronto: entregue o documento a ele
ed.contentWindow.postMessage({
type: 'jsoneditor:load',
name: 'Settings',
content: await (await fetch('/config/app.json')).text()
}, ORIGIN);
}
if (m.type === 'jsoneditor:change') document.title = '● not saved'; // uma edição real
if (m.type === 'jsoneditor:save') { // o usuário clicou em "Salvar"
await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: m.name, content: m.content }) });
document.title = 'Saved';
}
});
// Um botão de salvar na sua própria página: a resposta chega como jsoneditor:save
function saveNow() { ed.contentWindow.postMessage({ type: 'jsoneditor:get' }, ORIGIN); }
</script>
Assistente de IA dentro da sua página: ele também funciona no frame. Com allow="clipboard-write" no iframe, "Copiar prompt" usa a área de transferência diretamente (senão o editor recorre ao antigo comando de copiar, ou mostra o prompt para copiar à mão). Um link enviado pela IA não alcança um editor dentro de outro site, então o editor pede à IA e ao usuário que colem a resposta inteira da IA no editor - ou abram o editor em uma janela própria.
window.open("https://json.giit.ch/?embed=window", "jsoneditor-17") abre o editor completo em uma janela própria e troca as mesmas mensagens com window.opener. Os links de uma IA chegam até ele ali. jsoneditor:load também pode levar context: { host, title, rules } - o prompt da IA então diz a que lugar o documento pertence e segue as suas regras - e hook: { url, token }, um webhook só para este documento que nunca é guardado. Fechar a janela com alterações não salvas envia jsoneditor:closing.
Entregue ao editor o seu próprio prompt, um endereço no seu site e uma chave para esta sessão do editor. A janela de IA mostra então "Conectado a" o seu site, o que você diz à IA, e a escolha alterar o documento atual ou criar um novo; Copiar prompt junta tudo. A IA envia o resultado com a chave para o seu servidor, e a sua página o abre no editor - um novo documento abre separado e fica no navegador do usuário. Uma chave por sessão do editor: ela vale enquanto o editor estiver aberto, e só enquanto não tiver nenhuma o editor a pede com jsoneditor:key-request. O editor nunca envia a chave por conta própria e nunca a guarda; o endereço precisa ser https no seu próprio host ou em um subdomínio dele.
const key = async () => (await fetch('/api/ai-key.php?doc=17')).json(); // uma chave por sessão do editor
const k = await key();
ed.contentWindow.postMessage({ type: 'jsoneditor:load', name: 'Settings', content, ai: {
label: 'My Site', prompt: 'Keep every key. Only change values.',
endpoint: 'https://your-site.com/api/ai-result.php', key: k.key } }, ORIGIN);
// guarde o id de jsoneditor:loaded e ignore change/save/closing com outro id
// só enquanto o editor não tiver chave:
if (m.type === 'jsoneditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'jsoneditor:ai', key: k.key }, ORIGIN); }
// enquanto o editor estiver aberto, avise o seu servidor a cada minuto; fechar o editor ou a página invalida a chave
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// o seu servidor tem um resultado (polling, SSE …): target é "current" ou "new"
ed.contentWindow.postMessage({ type: 'jsoneditor:load', name: 'Settings', content: draft, from: 'ai', target }, ORIGIN);
Crie chaves com pelo menos 128 bits aleatórios, guarde só o hash delas, vincule cada uma ao usuário logado, ao documento e a esta sessão do editor, crie uma por sessão, mantenha-a válida só enquanto a sua página informar que a sessão está aberta, e invalide-a quando o editor ou a página fechar.
O protocolo completo está em llms.txt - entregue-o a uma IA e ela monta a conexão para o seu sistema. O Editor YAML funciona do mesmo jeito com o prefixo yamleditor: - yaml.giit.ch.
Não. O editor roda inteiramente no seu navegador. Seus documentos nunca são enviados a um servidor, a não ser que você mesmo configure um webhook para o seu próprio servidor.
Sim. Clique em uma chave ou valor na árvore, digite e pressione Enter. A alteração é gravada no código exatamente naquele lugar - o resto mantém a formatação - e Desfazer volta atrás. Os botões acima da árvore adicionam, duplicam, movem e removem entradas e mudam o tipo de um valor.
Sim. Comentários, vírgulas sobrando no final, aspas simples e chaves sem aspas são lidos e mostrados na árvore, com um aviso de que não são JSON puro. "Formatar" escreve JSON puro.
Abra ou cole o JSON Schema como um segundo documento e escolha-o na aba Schema. Cada lugar que não bate aparece com linha e coluna. O editor nunca baixa um schema da internet - um endereço $schema no documento é só exibido.
Sim, na aba Converter ou em Exportar. O CSV precisa de um array de objetos - cada objeto é uma linha. Arquivos YAML, CSV e XML que você abre são convertidos para JSON.
Só no seu navegador. Clique no botão de pasta no canto superior esquerdo (Meus documentos) para abrir, renomear, duplicar, baixar ou excluir os documentos. Limpar os dados do site no navegador os apaga, então baixe os que você quer manter - ou deixe o editor enviá-los ao seu próprio servidor ("Salvar no servidor").
Sim, qualquer IA - ChatGPT, Claude, Gemini, Copilot ou a IA da sua ferramenta de programação. Clique em "Assistente de IA", depois em "Copiar prompt", cole na sua IA e diga o que ela deve alterar. A IA responde com um link; clique nele e os dados aparecem no seu editor. "Desfazer" desfaz qualquer alteração.
Não. O editor é gratuito, sem anúncios e sem cadastro.