152 votes

Convertit une chaîne de l’objet en JSON

<p>Comment puis-je convertir une chaîne qui décrit un objet en une chaîne JSON à l’aide de JavaScript (ou jQuery) ?<p>par exemple : convertir ce (<em>pas</em> une chaîne JSON valide) :</p><pre><code></code></pre><p>dans ceci :</p><pre class="lang-js prettyprint-override"><code></code></pre><p>J’aimerais éviter d’utiliser <code></code> si possible...</p></p>

168voto

Matthew Crumley Points 47284

Si la chaîne est à partir d'une source fiable, vous pouvez utiliser eval alors JSON.stringify le résultat. Comme ceci:

var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
var json = JSON.stringify(eval("(" + str + ")"));

Notez que lorsque vous eval un objet littéral, il doit être enveloppé dans des parenthèses, sinon les accolades sont analysées comme un bloc au lieu d'un objet.

Je suis également d'accord avec les commentaires en-dessous de la question qu'il serait beaucoup mieux de coder l'objet en JSON valide pour commencer et éviter d'avoir à analyser, encoder, puis, vraisemblablement, de l'analyser à nouveau. HTML prend en charge une seule cité attributs (juste être sûr de HTML-encoder n'importe quel guillemets à l'intérieur des chaînes de caractères).

107voto

Rocket Hazmat Points 87407

Votre chaîne n'est pas valide JSON, donc, JSON.parse (ou jQuery $.parseJSON) ne fonctionne pas.

Un autre moyen serait d'utiliser eval "analyser" le "non valide" JSON, puis stringify "convertir" à JSON valide.

var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }"
str = JSON.stringify(eval('('+str+')'));

Je suggère plutôt que d'essayer de "réparer" votre invalid JSON, vous commencez avec JSON valide en premier lieu. Comment est - str générée, il doit être fixé, avant de elle est générée, pas après.

EDIT: Vous avez dit (dans les commentaires) cette chaîne est stockée dans un attribut de données:

<div data-object="{hello:'world'}"></div>

Je vous suggère de fixer ici, alors il peut simplement être JSON.parsed. Tout d'abord, ils ont les clés et les valeurs doivent être cités entre guillemets doubles. Il devrait ressembler (un seul cité attributs HTML sont valables):

<div data-object='{"hello":"world"}'></div>

Maintenant, vous pouvez simplement utiliser JSON.parse (ou jQuery $.parseJSON).

var str = '{"hello":"world"}';
var obj = JSON.parse(str);

49voto

Farmor Points 4928
<p><a href="http://api.jquery.com/jQuery.parseJSON/"><strong>jQuery.parseJSON</strong></a><pre><code></code></pre><p>Edit. C’est si que vous avez une chaîne JSON valide</p></p>

38voto

Ronald Points 269
<p>Utiliser du code simple dans le lien ci-dessous :<p><a href="http://msdn.microsoft.com/es-es/library/ie/cc836466%28v=vs.94%29.aspx" rel="nofollow">http://msdn.Microsoft.com/es-es/Library/IE/cc836466%28V=vs.94%29.aspx</a></p><pre><code></code></pre><p>et vers l’arrière</p><pre><code></code></pre></p>

22voto

allenhwkim Points 6012
<p>J’espère que cette petite fonction convertit la chaîne JSON non valide en valide.<pre><code></code></pre><p>Résultat</p><pre><code></code></pre></p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: