2009-06-07 13 views
2

Mein Formular im HTML-DOM ist ein Kontrollkästchen zum Klicken (es kann mehrere sein). Das Problem tritt in der Beschreibungszeichenfolge auf, wann immer ich ein Apostroph verwende, da mein Listenobjekt eine einzelne Anführungsstriche enthält. Dies ist eines der Kontrollkästchen in der Form:Wie JSON zu JavaScript-Array zu string

<input type="checkbox" id="cbx" name="cbx" value="{'getPic': 'url', 'picsrc': 'http://lh3.ggpht.com/_ZB3cttqooN0/SVmJPfusGWI/AAAAAAAADvA/GuIRgh6eMOI/Grand%20Canyon%201213_121508214.JPG', 'pos': None, 'description': 'Here's what it REALLY looks like at 5:30am! Bring your headlight!'}"> 

Die Javascript, das die Werte der geprüften Kontrollkästchen liest und schiebt sie in ein Array (Liste):

var pylist = []; 
    for (i=0; i<document.picList.cbx.length; i++) { 

      if (document.picList.cbx[i].checked) { 
       pylist.push(document.picList.cbx[i].value); 
      } 
    } 

var getstr = JSON.stringify(pylist); 

Das Problem ist immer, dass getstr An dieser Stelle wurde nach dem Anführungszeichen in der Beschreibungseigenschaft alles abgehackt. Ich habe verschiedene Möglichkeiten ausprobiert, um es zu vergeblichen.

+0

Als Referenz ist dies kein gültiger JSON. Die Strings müssen doppelt zitiert werden, und jeder anständige JSON-Serializer wird dies tun. – cHao

Antwort

1

Das Problem ist, dass der Wert des Kontrollkästchens bereits eine JSON-Zeichenfolge ist. Eine Lösung wäre JSON.parse() auf dem Wert zu nennen:

var pylist = []; 
    for (i=0; i<document.picList.cbx.length; i++) { 

      if (document.picList.cbx[i].checked) { 
       pylist.push(JSON.parse(document.picList.cbx[i].value)); 
      } 
    } 

var getstr = JSON.stringify(pylist); 
0

Ich habe in der gleichen Ausgabe laufen - wir json in einem versteckten Bereich bleiben, damit wir nicht den Server, auf jeder Abfrage müssen Seite. Wir ersetzen Apostrophe durch einen "Code" vor dem Einfügen in den HTML-Code - wir haben eine JavaScript-Funktion hinzugefügt, die den Code durch einen Apostroph ersetzt.

Wirklich hacky, aber es funktioniert wirklich gut. Natürlich haben wir einen Platz im Code, der json vom Server bekommt und einen Ort, an dem JavaScript ihn analysieren muss. Wenn Sie feststellen, dass Sie die Methoden im gesamten Code wiederholen, wird Ihre Laufleistung variieren.