【问题标题】:Convert Javascript serialize to Javascript object将 Javascript 序列化转换为 Javascript 对象
【发布时间】:2014-08-08 04:48:33
【问题描述】:

我有一个 id 为“dataArrayField”的文本区域,其中包含代码,例如:

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

然后我在这个 textarea 上运行 var content = $('#dataArrayField').serialize();,它的 nem 为 codeformat,因此返回的数据将类似于:

codeFormat=item1%3a+ etc etc

然后我使用$.deparam(content) Javascript 插件将序列化的字符串转换为 对象。

这可行,但是,实际返回的唯一键是 codeFormat 名称,然后值是上面字段中的文本,所以我得到如下内容:

我该怎么做才能访问传递对象中的所有信息!

【问题讨论】:

  • #dataArrayField 是你的textarea 还是form
  • @ShannonHochkins 我不这么认为,你可以serializeform 但不能textarea,看看你的html
  • 你绝对可以序列化一个文本区域.....@OscarJara,它的工作,这就是我正在做的?
  • @OscarJara,api.jquery.com/serialize,你绝对可以序列化textareas。
  • @ShannonHochkins 嘿!感谢您指出这一点:-)

标签: javascript jquery arrays string object


【解决方案1】:

如果您有一个表示 javascript 对象的字符串并希望从中创建一个实际对象,则一种选择是使用 eval。

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

如果用户可以输入稍后显示给其他用户的文本,这可能不是一件非常安全的事情。

【讨论】:

  • 使用JSON.parse()会更安全
【解决方案2】:

您可以在textarea 中放置一个有效的 JSON 字符串,例如

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

或者您可以在应用JSON.parse() 之前使用THIS WORKING DEMO 中的正则表达式来清理它。正如@jibsales 已经指出的那样,不要使用eval()

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

【讨论】:

  • 我将其更改为公认的答案,因为每个人都说不要使用 eval。
【解决方案3】:

评估是邪恶的。考虑改用 JSON.serialize() 和 JSON.parse()。在文本区域中输入的对象必须是有效的 JSON,但它更安全。

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 2011-09-10
    • 2011-09-23
    • 1970-01-01
    • 2020-09-23
    • 2019-10-03
    • 2020-01-07
    • 1970-01-01
    相关资源
    最近更新 更多