Преобразование сериализации Javascript в объект Javascript

#javascript #jquery #arrays #string #object

#javascript #jquery #массивы #строка #объект

Вопрос:

У меня есть текстовая область с идентификатором ‘dataArrayField’, в которой есть код, пример:

 item1: {
    type: 'foo',
    fieldName: 'bar'}
},
item2: {
    type: 'cat',
    fieldName: 'dog'
}
  

Затем я запускаю var content = $('#dataArrayField').serialize(); эту текстовую область, которая имеет nem of codeformat , поэтому возвращаемые данные будут примерно такими:

codeFormat=item1: etc etc

Затем я использую плагин $.deparam(content) Javascript, чтобы превратить сериализованную строку в объект.

Это работает, однако единственным ключом, который фактически возвращается, является имя codeFormat, тогда значением является текст в поле выше, поэтому я получаю что-то вроде этого:

введите описание изображения здесь

Что я могу сделать, чтобы получить доступ ко всей информации в переданном объекте!

Комментарии:

1. #dataArrayField Ваш textarea или form ?

2. @ShannonHochkins Я так не думаю, вы можете serialize form , но не a textarea , просто взгляните на свой html

3. Вы определенно можете сериализовать текстовую область….. @OscarJara, это работает, и это то, что я делаю?

4. @OscarJara, api.jquery.com/serialize , вы определенно можете сериализовать текстовые области.

5. @ShannonHochkins Привет! спасибо, что указали на это 🙂

Ответ №1:

Если у вас есть строка, представляющая объект javascript, и вы хотите создать из нее реальный объект, одним из вариантов может быть использование eval .

 var str = "item1: {type: 'foo',fieldName: 'bar'},item2: {type: 'cat',fieldName: 'dog'}";
var obj = eval('({'   str   '})');
alert(obj.item1.type); // foo!
  

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

Комментарии:

1. Было бы безопаснее использовать JSON.parse()

Ответ №2:

Вы можете либо поместить допустимую строку JSON в textarea

{"item1":{"type":"foo","fieldName":"bar"},"item2":{"type":"cat","fieldName":"dog"}}

или вы можете использовать регулярные выражения, как в ЭТОЙ РАБОЧЕЙ демонстрации, чтобы очистить его перед применением JSON.parse() . Как уже указывал @jibsales, не используйте eval() :

 $(function() {
    var val = $('#dataArrayField').val().replace(/[s']/g,'').replace(/(w )/g,'"$1"');
    val = '{'   val.replace(/}},/g,'},')   '}';
    console.log( JSON.parse(val) );
});
  

Комментарии:

1. Я изменил это на принятый ответ, поскольку все говорят, что не используйте eval.

Ответ №3:

Eval — это зло. Рассмотрите возможность использования вместо этого JSON.serialize() и JSON.parse() . Объекты, введенные в текстовую область, должны быть действительными в формате JSON, но это намного безопаснее.