Как преобразовать JSON в массив JavaScript - PullRequest
2 голосов
/ 07 июня 2009

Моя форма в html DOM - это флажок, который нужно щелкнуть (их может быть несколько). Проблема возникает в строке описания, когда я использую апостроф, поскольку мой объект списка разделен одинарными кавычками. Это один из флажков в форме:

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

JavaScript, который читает значения отмеченных флажков и помещает их в массив (список):

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);

Проблема всегда в том, что gettr в этот момент отрубает все подряд после одинарной кавычки в свойстве description. Я пробовал разные способы избежать этого, но безрезультатно.

Ответы [ 2 ]

1 голос
/ 07 июня 2009

Проблема в том, что значение флажка уже является строкой JSON. Одним из решений будет вызов JSON.parse () для значения:

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 голосов
/ 07 июня 2009

Я столкнулся с той же проблемой - мы вставляем json в скрытое поле, поэтому нам не нужно запрашивать сервер на каждой странице. Мы заменяем апострофы на «код» перед добавлением в html - мы добавили функцию javascript, которая заменяет код апострофом.

Действительно хакерский, но работает очень хорошо. Конечно, у нас есть одно место в коде, которое получает json с сервера, и одно место, где javascript должен его анализировать - если вы обнаружите, что повторяете методы по всему коду, ваш пробег будет отличаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...