Estou chocado com a presença de desinformação altamente votada em uma pergunta tão vista sobre um tópico básico.
As cadeias JSON não podem ser citadas com aspas simples . As várias versões da especificação ( o original de Douglas Crockford, a versão ECMA e a versão IETF ) afirmam que as strings devem ser citadas com aspas duplas. Esta não é uma questão teórica, nem uma questão de opinião, como sugere a resposta aceita atualmente; qualquer analisador JSON do mundo real cometerá um erro se você tentar fazer com que ele analise uma sequência de aspas simples.
As versões de Crockford e ECMA até exibem a definição de uma string usando uma imagem bonita, o que deve tornar o ponto inequivocamente claro:
A imagem bonita também lista todas as seqüências de escape legítimas dentro de uma string JSON:
\"
\\
\/
\b
\f
\n
\r
\t
\u
seguido por quatro dígitos hexadecimais
Observe que, ao contrário do absurdo em algumas outras respostas aqui, \'
nunca é uma sequência de escape válida em uma sequência JSON. Não precisa ser, porque as strings JSON sempre são aspas duplas.
Por fim, você normalmente não precisa pensar em escapar de caracteres quando gerar JSON de forma programática (embora seja claro que editará manualmente, por exemplo, um arquivo de configuração baseado em JSON). Em vez disso, forme a estrutura de dados que você deseja codificar usando qualquer tipo de mapa, matriz, sequência, número, booleano e nulo nativo que seu idioma possua e, em seguida, codifique-o para JSON com uma função de codificação JSON. Essa função provavelmente está embutida em qualquer linguagem que você esteja usando, como JavaScript JSON.stringify
, PHP json_encode
ou Python.json.dumps
. Se você estiver usando um idioma que não possui essa funcionalidade incorporada, provavelmente poderá encontrar uma biblioteca de análise e codificação JSON para usar. Se você simplesmente usar funções de linguagem ou biblioteca para converter itens de e para JSON, nunca precisará conhecer as regras de escape do JSON. Isto é o que a pergunta equivocada que deveria fazer aqui deveria ter feito.