Eu gerei algum JSON e estou tentando inseri-lo em um objeto em JavaScript. Eu continuo recebendo erros. Aqui está o que eu tenho:
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = eval('('+data+')');
Isso me dá um erro:
unterminated string literal
Com JSON.parse(data)
, vejo mensagens de erro semelhantes: " Unexpected token ↵
" no Chrome e "unterminated string literal
" no Firefox e IE.
Quando tiro o \n
depois, sometext
o erro desaparece nos dois casos. Parece que não consigo descobrir por que os \n
erros eval
e as JSON.parse
falhas.
javascript
json
newline
Urso polar
fonte
fonte
Respostas:
Eu acho que é isso que você quer:
(Você precisa escapar do "\" na sua cadeia de caracteres (transformando-o em um duplo - "\"), caso contrário, ela se tornará uma nova linha na fonte JSON, não nos dados JSON.)
fonte
Você precisará ter uma função que substitua
\n
para\\n
, casodata
não seja uma string literal.O resultado
dataObj
seráfonte
.replace("\\n", "\\\\n")
) e gostaria também sugerem usando regex para permitir a substituição de várias instâncias (ie.replace(/\n/g, "\\\\n")
).replace("\n", "\\n")
deve fazer o trabalho bem !! Por exemplo,var test = [{"description":"Some description about the product. This can be multi-line text."}]; console.log(JSON.parse(test.replace(/\n/g, "\\n")));
produzirá o objeto perfeitamente bem no console do navegador como[{"description":"Some description about the product.\nThis can be multi-line text."}]
\n
no valor.eval
função. 17 votos positivos ???De acordo com a especificação, http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf :
Portanto, você não pode passar
0x0A
ou0x0C
códigos diretamente. É proibido! A especificação sugere o uso de seqüências de escape para alguns códigos bem definidos deU+0000
aU+001F
:\f
representa o caractere de feed de formulário (U+000C
).\n
representa o caractere de avanço de linha (U+000A
).Como a maioria das linguagens de programação usa
\
para citação, você deve escapar da sintaxe de escape (escape duplo - uma vez para idioma / plataforma, uma vez para o próprio JSON):fonte
Você pode simplesmente escapar sua cadeia de caracteres no servidor ao escrever o valor do campo JSON e desescapá-lo ao recuperar o valor no navegador do cliente, por exemplo.
A implementação JavaScript de todos os principais navegadores possui o comando unescape.
Exemplo:
No servidor:
No navegador:
fonte
Você pode querer olhar para esta função C # para escapar da string:
http://www.aspcode.net/C-encode-a-string-for-JSON-JavaScript.aspx
fonte
>
?Eu usei essa função para remover nova linha ou outros caracteres nos dados para analisar dados JSON:
fonte
JSON.stringify
converteria a string acima em
como mencionado aqui
json stringify
fonte
Eu encontrei esse problema ao criar uma classe no PHP 4 para emular o json_encode (disponível no PHP 5). Aqui está o que eu vim com:
Eu segui as regras mencionadas aqui . Eu usei apenas o que eu precisava, mas acho que você pode adaptá-lo às suas necessidades no idioma que está usando. O problema no meu caso não era sobre novas linhas como eu pensava originalmente, mas sobre o / não ser escapado. Espero que isso impeça outra pessoa da pequena dor de cabeça que tive para descobrir o que fiz de errado.
fonte
Como eu entendo que você pergunta, não se trata de analisar JSON porque você pode copiar e colar o seu JSON em seu código diretamente - por isso, se este for o caso, em seguida, basta copiar o seu JSON dirigir a
dataObj
variável sem envolvê-lo com aspas simples (dica:eval==evil
)fonte