这是我当前的对象:
{"or_11[and_3][gt@last_closed_sr]":"2019-06-18"}
我希望它看起来像:
{
"or_11": {
"and_3": {
"gt@last_closed_sr": "2019-06-18",
}
}
}
做到这一点的最佳方法是什么?
答案 0 :(得分:1)
let str = '"or_11[and_3][gt@last_closed_sr]":"2019-06-18"';
let first = str.replace(/"/g, '').match(/\w+/)[0];
let pattern = /\[(.+?)\]/g;
let matches = [];
let match;
while(match = pattern.exec(str)) {
matches.push(match[1])
}
let val = str.replace(/"/g, '').split(':')[1];
let obj = {
[first]: {
[matches[0]]: {
[matches[1]]: val
}
}
}
console.log(obj)
答案 1 :(得分:1)
通常,对格式不正确的数据的答案是修复格式化程序,而不是实现解析器。但是,我已经使用了对像这样的数据进行编码的系统,所以这里有一个解析器。
function parseSquareSeparatedData(data) {
const result = {};
Object.keys(data).forEach((key) => {
const keyParts = key.replace(/]/g, "").split("[");
const last = keyParts.pop();
let resultPointer = result;
keyParts.forEach((keyPart) => {
if (!(keyPart in resultPointer)) {
resultPointer[keyPart] = {};
}
resultPointer = resultPointer[keyPart];
})
resultPointer[last] = input[key];
})
return result;
}