Json从一种形式转换为另一种形式

时间:2020-10-22 08:41:14

标签: javascript jquery json

我想将此JSON转换为结果部分中提到的格式。

[
  { name: "FieldData[FirstName][Operator]", value: "=" }
  { name: "FieldData[FirstName][Value]", value: "test" }
  { name: "FieldData[LastName][Operator]", value: "=" }
  { name: "FieldData[LastName][Value]", value: "test" }
]

结果:

FieldData
{
    FirstName {
        Operator: =,
        Value: tset
    },
    LastName {
        Operator: =,
        Value: tset
    }
}

2 个答案:

答案 0 :(得分:0)

使用String.prototype.split函数和正则表达式,您可以提取[]内的字符串,并根据该数据生成嵌套对象,如下所示。

const input = [
  {name: "FieldData[FirstName][Operator]", value: "="},
  {name: "FieldData[FirstName][Value]", value: "test"},
  {name: "FieldData[LastName][Operator]", value: "="},
  {name: "FieldData[LastName][Value]", value: "test"}
];

const result = input.reduce((acc, cur) => {
  const keys = cur.name.split(/\[(.*?)\]/).filter((item) => item);
  let item = acc;
  for (let index = 0; index < keys.length - 1; index ++) {
    const key = keys[index];
    if (!(key in item)) {
      item[key] = {};
    }
    item = item[key];
  }
  item[keys[keys.length - 1]] = cur.value;
  return acc;
}, {});
console.log(result);

答案 1 :(得分:0)

使用正则表达式和javascript使用obj[propname] = value设置属性与obj.propname = value相同的功能

var d = [
  { name: "FieldData[FirstName][Operator]", value: "=" },
  { name: "FieldData[FirstName][Value]", value: "test" },
  { name: "FieldData[LastName][Operator]", value: "=" },
  { name: "FieldData[LastName][Value]", value: "test" },
];

var r = {};
for (var i=0; i<d.length; ++i)
{
    var parts = d[i].name.match(/(.*)\[(.*)\]\[(.*)\]/) 
    
    r[parts[1]] = r[parts[1]] || {};
    r[parts[1]][parts[2]] = r[parts[1]][parts[2]] || {};
    r[parts[1]][parts[2]][parts[3]] = d[i].value;
}
console.log(r)

(注意:SO控制台对对象进行JSON处理,在浏览器控制台中查找该对象)