J'ai généré du JSON et j'essaye de le tirer dans un objet en JavaScript. Je continue à recevoir des erreurs. Voici ce que j'ai:
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = eval('('+data+')');
Cela me donne une erreur:
unterminated string literal
Avec JSON.parse(data)
, je vois des messages d'erreur similaires: " Unexpected token ↵
" dans Chrome et " unterminated string literal
" dans Firefox et IE.
Lorsque je retire l' \n
après, sometext
l'erreur disparaît dans les deux cas. Je n'arrive pas à comprendre pourquoi les \n
marques eval
et JSON.parse
échouent.
javascript
json
newline
ours polaire
la source
la source
Réponses:
Je suppose que c'est ce que vous voulez:
(Vous devez échapper le "\" dans votre chaîne (en le transformant en double - "\"), sinon il deviendra une nouvelle ligne dans la source JSON, pas les données JSON.)
la source
Vous aurez besoin d'une fonction qui remplace
\n
au\\n
cas où cedata
n'est pas un littéral de chaîne.Le résultat
dataObj
serala source
.replace("\\n", "\\\\n")
) et je suggérerais également d'utiliser l'expression régulière pour permettre de remplacer plusieurs instances (c.-à-d..replace(/\n/g, "\\\\n")
).replace("\n", "\\n")
devrait bien faire le travail !! Par exemple,var test = [{"description":"Some description about the product. This can be multi-line text."}]; console.log(JSON.parse(test.replace(/\n/g, "\\n")));
affichera parfaitement l'objet sur la console du navigateur comme[{"description":"Some description about the product.\nThis can be multi-line text."}]
\n
dans la valeur.eval
fonction. 17 votes positifs ???Selon la spécification, http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf :
Vous ne pouvez donc pas passer
0x0A
ou0x0C
coder directement. C'est interdit! La spécification suggère d'utiliser des séquences d'échappement pour certains codes bien définis deU+0000
àU+001F
:\f
représente le caractère de flux de formulaire (U+000C
).\n
représente le caractère de saut de ligne (U+000A
).Comme la plupart des langages de programmation utilisent
\
pour les guillemets, vous devez échapper à la syntaxe d'échappement (double-échappement - une fois pour le langage / la plateforme, une fois pour JSON lui-même):la source
Vous pouvez simplement échapper votre chaîne sur le serveur lors de l'écriture de la valeur du champ JSON et l'échapper lors de la récupération de la valeur dans le navigateur client, par exemple.
L'implémentation JavaScript de tous les principaux navigateurs a la commande unescape.
Exemple:
Sur le serveur:
Dans le navigateur:
la source
Vous voudrez peut-être examiner cette fonction C # pour échapper à la chaîne:
http://www.aspcode.net/C-encode-a-string-for-JSON-JavaScript.aspx
la source
>
?J'ai utilisé cette fonction pour supprimer la nouvelle ligne ou d'autres caractères dans les données pour analyser les données JSON:
la source
JSON.stringify
convertirait la chaîne ci-dessus en
comme mentionné ici
json stringify
la source
J'ai rencontré ce problème lors de la création d'une classe en PHP 4 pour émuler json_encode (disponible en PHP 5). Voici ce que j'ai trouvé:
J'ai suivi les règles mentionnées ici . Je n'ai utilisé que ce dont j'avais besoin, mais je pense que vous pouvez l'adapter à vos besoins dans la langue que vous utilisez. Le problème dans mon cas ne concernait pas les nouvelles lignes comme je le pensais à l'origine, mais le / ne pas être échappé. J'espère que cela empêchera quelqu'un d'autre du petit mal de tête que j'avais de comprendre ce que j'ai fait de mal.
la source
Comme je vous comprends la question, il est pas l' analyse syntaxique JSON parce que vous pouvez copier-coller votre JSON dans votre code directement - donc si tel est le cas , alors il suffit de copier votre JSON directement à la
dataObj
variable sans l' emballer avec des guillemets simples (conseil:eval==evil
)la source