javascript - 将 HTML 表单数据转换为嵌套 JSON

标签 javascript json parsing nested form-data

我正在尝试将表单数据(字段名称引用嵌套 JSON 结构)转换为 JSON 对象。表示表单数据的对象是:

{
    "custom[1].a": "FIXED",
    "custom[1].b": "",
    "custom[1].c": "PROPORTIONATE",
    "custom[1].d": ""
    "custom[2].a": "FIXED2",
    "custom[2].b": "",
    "custom[2].c": "PROPORTIONATE2",
    "custom[2].d": ""
}

我想将其转换为可以字符串化的对象。

"customConfiguration": [
     {
        "a": "PROPORTIONATE",
        "b": "",
        "c": "FIXED",
        "d": ""
    },
    {   "a": "PROPORTIONATE2",
        "b": "",
        "c": "FIXED2",
        "d": ""
    }]

最佳答案

也许这就是你想要的。假设数字表示数组索引,并且从一开始,则减少索引以获得从零开始的结果。

  • 使用reduce迭代对象的所有键,从空对象开始

  • [ 替换为 .[,将键分成几部分,因此带有 [...] 的字符串表示数组值其他都是常用属性

  • 为正确的属性引用应用一个reduce,从第一个reduce的对象开始

    • 检查 item 是否为数组索引,如果是则减 1,使其从零开始

    • 应用于属性,如果下一部分是数组索引,则返回一个数组,否则返回一个对象

    • 检查该键是否是数组中的最后一个键并分配值

    • 返回新对象引用

  • 返回新对象

var object = {
        'custom[1].a': 'PROPORTIONATE',
        'custom[1].b': '',
        'custom[1].c': 'FIXED',
        'custom[1].d': '',
        'custom[2].a': 'PROPORTIONATE2',
        'custom[2].b': '',
        'custom[2].c': 'FIXED2',
        'custom[2].d': ''
    },
    newObject = Object.keys(object).reduce(function (r, a) {
        a.replace('[', '.[').split('.').reduce(function (o, b, i, kk) {
            function isArrayIndex(s) { return /^\[\d+\]$/.test(s); }                
            if (isArrayIndex(b)) {
                b = b.match(/\d+/) - 1;
            }
            o[b] = o[b] || (isArrayIndex(kk[i + 1]) ? [] : {});
            if (i + 1 === kk.length) {
                o[b] = object[a];
            }
            return o[b];
        }, r);
        return r;
    }, {});

    document.write('<pre>' + JSON.stringify(newObject, 0, 4) + '</pre>');

关于javascript - 将 HTML 表单数据转换为嵌套 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656665/

相关文章:

compiler-construction - Scalas/Haskells 解析器组合器是否足够?

javascript - 在不同投影的 basemap 之间切换时如何重新投影矢量图层

Javascript 表单验证 - 多个大于 0 的表单字段

javascript - 我将如何/在 Node 中使用什么来抓取 <video> src?

javascript - jquery 隐藏和显示 div 失败

java - Android 解析 JSON 数据时出错

android - 如何为 volley 实现 JSON 流概念以避免 OutOfMemory 错误?

c# - 浏览器提示下载 JSON 响应,ASP.NET MVC2

python - 如何计算 YAML 中定义的代数表达式?

c++ - 如何编写递归下降解析器?