Cookies para estatística e publicidade
Usamos cookies de estatística e de publicidade, ambos enviados ao Google. Recusar não muda nada do que você vê.Ler a página de privacidade
Aqui você converte INI para JSON de graça e sem conta: solte o arquivo acima e em poucos segundos o resultado está pronto para baixar. A conversão acontece dentro do seu próprio navegador, então o arquivo nunca é enviado. Funciona igual no Windows, no macOS e no Linux e também no iPhone e no Android, e continua funcionando mesmo se você cortar a conexão.
Até 100 arquivos de uma vez. Formatos misturados não são problema.
Eles são convertidos um após o outro e baixados juntos em um ZIP.
INI para JSON
O resultado é um único objeto JSON. Cada cabeçalho de seção vira uma chave guardando um objeto próprio, e os pares chave-valor sob esse cabeçalho viram propriedades desse objeto. Chaves escritas antes de qualquer cabeçalho de seção — o que muitas ferramentas chamam de bloco global — ficam no nível superior ao lado dos objetos de seção.
É toda a tradução estrutural, porque não há mais nada num arquivo INI para traduzir. O que torna este par digno de leitura não é a forma, é os valores, que não atravessam a viagem tão literalmente quanto a forma.
Um arquivo INI não tem tipos. Tudo depois do sinal de igual são caracteres, e cada programa que lê um decide sozinho o que esses caracteres significam. Este leitor decide assim: as strings exatas true e false viram booleanos JSON, qualquer coisa que interprete como um número finito vira número JSON, e o resto continua string.
Para a maioria das configurações essa é a decisão certa e poupa uma passagem de parseInt do outro lado. O custo é que o leitor não consegue distinguir uma quantidade de um identificador, e é aí que o dano acontece.
Quatro casos falham silenciosamente e todos aparecem em arquivos de configuração reais. Um identificador com zero à esquerda escrito 007 vira o número 7. Uma máscara hexadecimal escrita 0x1F vira 31, correto em valor e errado em toda linha de log que a imprime de volta. Uma versão fixada como 1.0 vira 1.
O quarto caso é mais sutil: um inteiro maior que cerca de nove quatrilhões perde precisão, porque números JSON são doubles IEEE. Se uma chave guarda um ID grande ou um número de série, coloque entre aspas no INI original.
Vale saber quais chaves você não precisa conferir. Qualquer coisa com unidade anexada é segura, então um limite de memória escrito 128M continua a string 128M. Endereços com pontos continuam string, então 127.0.0.1 atravessa intocado. Horários como 08:00 continuam string, assim como caminhos, URLs, e qualquer coisa contendo uma letra que não faz parte de um número.
Um valor contendo um sinal de igual também sobrevive, porque a linha é dividida só no primeiro sinal de igual, o que mantém uma string de conexão ou parâmetro de consulta intacta.
Arquivos INI do Windows e php.ini usam On e Off muito mais que true e false, e o leitor não os trata como booleanos. Eles saem como as strings "On" e "Off", o que é defensável — afinal são apenas palavras — e quase nunca é o que quem consome o JSON espera.
O mesmo vale para yes e no, e para 1 e 0 usados como flags, que viram os números 1 e 0 em vez de booleanos. Um hábito mais seguro é normalizar essas chaves explicitamente no código consumidor em vez de assumir que a conversão as deixou consistentes.
A ordem das chaves é preservada quase em todo lugar, o que importa quando você está lendo um diff em vez de uma máquina. Seções saem na ordem em que apareceram, e chaves dentro de uma seção mantêm a ordem em que foram escritas.
A exceção são chaves numéricas. Objetos JavaScript colocam chaves parecidas com inteiro primeiro e em ordem numérica crescente, à frente de qualquer outra chave, então uma seção escrita 10, 2, nome sai como 2, 10, nome.
INI não tem especificação, então implementações discordam sobre cabeçalhos de seção repetidos: algumas mesclam, algumas mantêm as duas, algumas usam a última. Este leitor começa uma seção nova e vazia toda vez que encontra um cabeçalho, então um arquivo contendo [logging] duas vezes mantém só as chaves do segundo bloco.
Esse padrão aparece sempre que configurações são montadas por concatenação, um truque comum de deploy — um arquivo base mais uma sobreposição de ambiente, anexada. Procure cabeçalhos duplicados na origem antes de converter.
Esta é a perda estrutural em vez de incidental. INI suporta comentários e os usa bastante; JSON, como especificado na RFC 8259, não tem sintaxe de comentário nenhuma. Mesmo um conversor que quisesse preservá-los não teria onde colocá-los.
Num arquivo de configuração isso costuma ser a maior perda. A nota explicando por que um tamanho de pool é 12 em vez do padrão, o bloco comentado mantido como exemplo — nada disso atravessa. Mantenha o INI original no controle de versão ao lado do JSON.
A saída é JSON comum com indentação de dois espaços, então jq, Node, Python e qualquer validador de JSON Schema o leem sem cerimônia. Uma seção vira um caminho de objeto — .database.host no jq — e um esquema pode então afirmar que a porta é um número, o que é o ganho real sobre o arquivo INI.
Conversões deste tamanho são instantâneas e rodam inteiramente no navegador, com um teto de 100 MB no plano gratuito que nenhum arquivo de configuração jamais vai alcançar.
| INI | JSON | |
|---|---|---|
| Nome completo | Configuração INI | JavaScript Object Notation |
| Extensão do arquivo | .ini, .cfg, .conf | .json |
| Tipo de mídia | text/plain | application/json |
| Publicado pela primeira vez | 1985 | 2001 |
| Especificação | — | RFC 8259 |
| Licença | Padrão aberto | Padrão aberto |
| Situação hoje | Antigo, ainda lido em todo lugar | Atual |
| Abre no navegador | Nenhum navegador | Todos os navegadores |
| Considerado no lugar | TOML, YAML | XML, YAML, NDJSON |
Os comentários não sobrevivem. INI permite anotar um arquivo e JSON não tem sintaxe para isso, então cada linha de explicação se perde — e isso atinge justamente os arquivos que se comentam: configuração que outra pessoa vai manter.
JSON abre em qualquer navegador atual. INI alcança ainda menos navegadores. Se o arquivo vai para uma página web ou um formulário, esse costuma ser todo o motivo da conversão.
INI é de 1985 e está praticamente superado. JSON é o que os programas atuais escrevem, então converter também é uma forma de continuar conseguindo ler.
Visual Studio Code lê tanto INI quanto JSON, então dá para comparar o resultado com o original sem um segundo programa.
Os dois miram trabalhos diferentes: INI em a edição, JSON em mover dados entre programas e a web. Vale pesar isso antes, porque o motivo de um existir costuma ser o motivo de o outro ser incômodo.
JSON e de 2001, descrito em RFC 8259. Visual Studio Code, jq e Postman leem o formato.
INI foi publicado em 1985 e JSON em 2001. O mais antigo costuma ser o arquivo mais seguro para entregar; o mais novo faz o mesmo com menos bytes.
Não. Esta conversão acontece inteiramente no seu navegador, então o arquivo não sai do seu aparelho. Você mesmo pode conferir: abra a aba de rede das ferramentas de desenvolvedor e converta alguma coisa. Você verá a própria página e as requisições de estatística e de publicidade com que este serviço é pago, e nenhuma que leve o seu arquivo.
É. Sem conta, sem marca d’água e sem cota diária para gastar: roda no seu próprio aparelho, então você pode voltar quantas vezes quiser. O navegador processa arquivos de até 100 MB, 100 por vez.
Não. JSON guarda o mesmo conteúdo sem jogar nada fora: o resultado é idêntico em qualidade ao original.
Os comentários não sobrevivem. INI permite anotar um arquivo e JSON não tem sintaxe para isso, então cada linha de explicação se perde — e isso atinge justamente os arquivos que se comentam: configuração que outra pessoa vai manter.