Erreur de syntaxe lors de l'analyse de chaîne JSON
J'ai un échantillon de JSON avec une partie de ma page rendus :
{"html": {"#data": "\n<h2>Data</h2>\n<div class="\"manufacturer-image\"">\n \n</div>\n
<form action="\"/manage/update-manufacturer-data/3\"" method="\"post\"">\n \n
<div class="\"field\"">\n <div class="\"label\"">\n <label for="\"id_name\"">Nazwa</label>:\n
</div>\n \n \n <div class="\"error\"">\n
<input id="\"id_name\"" name="\"name\"" maxlength="50" type="\"text\"">\n
<ul class="\"errorlist\""><li>Pole wymagane</li></ul>\n </div>\n \n </div>\n\n
<div class="\"field\"">\n <div class="\"label\"">\n <label for="\"id_image\"">Zdjecie</label>:\n
</div>\n \n \n <div>\n <input name="\"image\"" id="\"id_image\"" type="\"file\"">\n
</div>\n \n </div>\n\n <div class="\"field\"">\n <div class="\"label\"">\n
<label for="\"id_description\"">Opis</label>:\n </div>\n \n \n <div>\n
<textarea id="\"id_description\"" rows="10" cols="40" name="\"description\""></textarea>\n </div>\n \n
</div>\n \n <div class="\"buttons\"">\n <input class="\"ajax-save-button" button\"="" type="\"submit\"">\n
</div>\n</form>"}}
Cette chaîne est retourné avec l'appel ajax et jQuery 1.6.1 renvoi d'une erreur :
SyntaxError: JSON.parse: expected ',' or '}' after property value in object
dans la partie suivante du code :
parseJSON: function( data ) {
if ( typeof data !== "string" || !data ) {
return null;
}
//Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim( data );
//Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
console.warn('data: ', data);
var ret;
try{
ret = window.JSON.parse(data);
} catch(e){
ret = {};
console.warn(e);
}
return ret;
//return window.JSON.parse( data );
}
Ce qui me manque ici ?
EDIT:
J'ai analysé le précédent 'json' (qui, par la façon dont a été créé avec python simplejson lib, donc je me demande comment cela peut-il être travailler de n'importe où) et maintenant jsonlint montre, que j'ai bon JSON. Toujours le problème reste le même. La nouvelle chaîne :
{"html": [{"#data": "\n<h2>Data</h2>\n<div class="manufacturer-image">\n \n</div>\n<form action="/manage/update-manufacturer-data/4" method="post">\n \n <div class="field">\n <div class="label">\n <label for="id_name">Nazwa</label>:\n </div>\n \n \n <div class="error">\n <input id="id_name" type="text" name="name" maxlength="50" />\n <ul class="errorlist"><li>Pole wymagane</li></ul>\n </div>\n \n </div>\n\n <div class="field">\n <div class="label">\n <label for="id_image">Zdjecie</label>:\n </div>\n \n \n <div>\n <input type="file" name="image" id="id_image" />\n </div>\n \n </div>\n\n <div class="field">\n <div class="label">\n <label for="id_description">Opis</label>:\n </div>\n \n \n <div>\n <textarea id="id_description" rows="10" cols="40" name="description"></textarea>\n </div>\n \n </div>\n \n <div class="buttons">\n <input type="submit" class="ajax-save-button button" />\n </div>\n</form>"}]}
EDIT2:
Ok, il semble, que JSOn en laissant mon backend est bon mais muet jQuery ajoute des guillemets autour de chaque """ qui est un peu bizarre.
OriginalL'auteur mike_hornbeck | 2011-10-27
Vous devez vous connecter pour publier un commentaire.
Les données sont pas JSON valide, depuis
\"
dans des chaînes semble avoir été remplacé par"\
.Contacter l'auteur de cette soi-disant-JSON et l'informe qu'il y a beaucoup de JSON les bibliothèques disponible pour tous langues et les plates-formes.
Bon point. Malheureusement, je ne peux pas trouver un moyen de générer un lien vers une validation spécifique, j'ai donc utilisé le mode JavaScript à ideone.
OriginalL'auteur phihag
OriginalL'auteur Rasal Shukla
J'ai peut-être tort ici, mais je pense que c'est en raison de données JSON lui-même, il ne fonctionne pas.
Le parser JSON probablement étouffe sur les guillemets dans le code HTML contenu dans le JSON ed variable de chaîne. Je pense que cela fonctionnera lorsque vous pré-processus de la chaîne HTML avant de sortir les données JSON afin de vous changer les guillemets en quelque chose d'autre. ( et de le faire dans l'autre sens après l'analyse des données JSON )
Un exemple, pour préciser un peu:
au lieu de cela:
{"html": { "#data": "<input name="somename" type="text"/>"} }
je vais essayer d'utiliser cette:
{"html": { "#data": "<input name="somename" type="text"/>"} }
Espère que ça aide...
JSON.stringify(foo).replace(/\\"/g, '\\\\"')
OriginalL'auteur Chris
JSON = Javascript Object Notation, à cet effet, la valeur de la
"#data"
propriété est une chaîne non valide.Vous pouvez valider votre JSON ici
OriginalL'auteur Andreas
Je pense que c'est probablement le fait que vous utilisez les mêmes guillemets dans votre code HTML lui-même de sorte que le JSON pense que sa valeur d'une propriété, essayez d'utiliser des guillemets simples pour tout le HTML
OriginalL'auteur Tules