2009-06-07 7 views
2

Mon formulaire dans le DOM html est une case à cocher à cliquer (il peut y en avoir plusieurs). Le problème se produit dans la chaîne de description lorsque j'utilise une apostrophe, car mon objet liste est délimité par une seule citation. Ceci est l'une des cases sous la forme:Comment stringifier JSON en tableau JavaScript

<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!'}"> 

Le javascript qui lit les valeurs des cases cochées et les pousse dans un tableau (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); 

Le problème est toujours getstr à ce stade a coupé tout everthing après la citation unique dans la propriété de description. J'ai essayé différentes façons d'échapper à peu d'avantages.

+0

Pour référence, ceci n'est pas valide JSON. Les chaînes doivent être entre guillemets, et tout sérialiseur JSON conforme décemment le fera. – cHao

Répondre

1

Le problème est que la valeur de la case à cocher est déjà une chaîne JSON. Une solution serait d'appeler JSON.parse() sur la valeur:

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

J'ai couru dans le même problème - nous collons JSON dans un champ caché que nous n'avons pas à interroger le serveur sur chaque page. Nous remplaçons les apostrophes par un "code" avant de les placer dans le html - nous avons ajouté une fonction javascript qui remplace le code par une apostrophe.

Vraiment hacky, mais ça marche très bien. Bien sûr, nous avons une place dans le code qui obtient json du serveur et un endroit où javascript doit l'analyser - si vous trouvez que vous répétez les méthodes dans votre code, votre kilométrage variera.

Questions connexes