#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
, но не atextarea
, просто взгляните на свой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, но это намного безопаснее.