【问题标题】:How to convert serialize array value to JSON in javascript如何在javascript中将序列化数组值转换为JSON
【发布时间】:2015-04-27 14:29:46
【问题描述】:

我有这样的序列化数组

rate_3=26&rate_8=67&rate_12=98等等,

现在我需要将此数组更改为 json 类型

    {
        "ID": "3",
        "Rate": "26"
    },
    {
        "ID": "8",
        "Rate": "67"
    },
    {
        "ID": "3",
        "Rate": "26"
   } .., 
   etc

所以我尝试过这样但它不起作用......请有人帮助我。

        var o = {};
        var a = table.$('input, select').serialize();
        $.each(a, function() 
        {
        if (o[this.name] !== undefined) 
            {
            if (!o[this.name].push) 
                {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            }
        else 
            {
                o[this.name] = this.value || '';
            }
        });
        return o;

我正在使用数据表,所以我只需要为使用此行的数据表序列化数组

var a = table.$('input, select').serialize();

即使我也尝试过使用 json2.js,但是当我使用 json2.js 时,它会强制页面提交

var data_2 = JSON.stringify(block_form.serializeArray());

【问题讨论】:

  • this but its not working - 实际发生了什么以及实际预期什么?
  • .serialize 函数返回一个字符串,而不是一个数组。所以你不能然后.each 它并期望它工作。不知道为什么你首先使用.serialize,因为看起来从选定的选项中构建你需要的对象会更容易。

标签: javascript arrays json serialization serializearray


【解决方案1】:

简单的方法是将map 覆盖正则表达式匹配的结果,将新对象推送到结果数组中:

var out = str.match(/\d+=\d+/g).map(function (el) {
    var arr = el.split('=');
    return { id: arr[0], rate: arr[1] };
});

DEMO

使用 JSON.stringify(out) 将输出数组转换为 JSON。

【讨论】:

    【解决方案2】:

    如果您的数据格式可靠地采用rate_N=X& 格式,您可以使用简单的字符串拆分来解析出这些值。这似乎类似于查询字符串的格式,如果是这种情况,您不应该遇到 (m) 任何异常实体。

    首先,您需要将每个键值对分开(在& 上)。然后在= 上拆分每一对以生成键和值。您需要从密钥中解析出 ID(将前面的 rate_ 剪掉),substr 可以很好地解决这个问题。

    var data = "rate_3=26&rate_8=67&rate_12=98";
    
    var pairs = data.split('&').reduce(function(collect, pair) {
      var kv = pair.split('=');
      var name = kv[0].substr(kv[0].indexOf('_') + 1);
      collect.push({
        id: name,
        rate: kv[1]
      });
      return collect;
    }, []);
    
    document.getElementById('results').textContent = JSON.stringify(pairs);
    <pre id="results"></pre>

    【讨论】:

    • 太棒了,这正是我想要的 :) 非常感谢
    【解决方案3】:

    http://jsfiddle.net/43hnftaf/

    var str = 'rate_3=26&rate_8=67&rate_12=98'
    var arr = str.split('&').map(function(element) { 
        return element.replace(/^rate_/, '');
    }).map(function(element) {
        var elements = element.split('=');
        return {
            "ID" : elements[0],
            "Rate" : elements[1]
        };
    });
    console.log(arr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多