As linhas do texto fonte e as do valor são diferentes

Em uma string JSON, uma barra invertida seguida de n representa uma quebra. Duas barras preservam uma barra e n como dois caracteres no valor. Ambos os exemplos são válidos, mas os valores text analisados têm comprimentos 3 e 4.

{"text":"A\nB"}
{"text":"A\\nB"}

JSON.parse('{"text":"A\\nB"}').text.length // 3
JSON.parse('{"text":"A\\\\nB"}').text.length // 4
Diagrama de um caractere LF e de uma barra invertida com n entre A e B
Diagrama próprio baseado em entradas executadas. Os números são o length do JavaScript do valor text analisado, não o tamanho do arquivo JSON em bytes.

Uma quebra real dentro da string causa erro

RFC 8259 exige escapes para caracteres de controle U+0000 a U+001F em strings, incluindo LF literal. Entre tokens são permitidos LF, CR, tabulações e espaços. Nos testes, LF literal dentro da string foi rejeitado, mas um objeto em várias linhas foi aceito.

const invalid = '{"text":"A' + '\n' + 'B"}';
formatJSON(invalid); // throws

formatJSON('{\n"text":"AB"\n}'); // accepted

RFC 8259 §7: Strings · RFC 8259 §2: JSON Grammar

Separe a formatação da interpretação do valor

O Moyoutil preserva os tokens das strings e altera a indentação externa. Não exibe \n como uma quebra real dentro do valor. A minificação também preserva os escapes. Em caso de erro, examine aspas e barras perto da posição indicada. Adicionar barras em toda a entrada pode alterar valores corretos.

Execute a formatação e validação com os exemplos e compare a saída minificada. Para um valor com quebra, serialize a string com JSON.stringify ao gerar JSON e confira o valor com JSON.parse. Validar sintaxe não valida os campos obrigatórios do esquema de uma API.

Perguntas frequentes

Minificar JSON remove quebras nos valores?

Não. Reduz espaços fora das strings. Esta ferramenta mantém os escapes e as quebras dos valores analisados.