在Angular 2+中重构JSON响应

时间:2018-08-26 13:47:54

标签: json angular typescript

我目前正在接收一个严重嵌套的Web api JSON响应,我想对其进行重组以仅提取所需的数据并使之更简单。

我该如何在Angular 2 + / Typescript中做到这一点?

任何帮助将不胜感激。

说我有这样的东西:

"O1": {
    "P1": "Something",
    "A1": [{
       "P2": "Something",
       "A2": [{
         "P3": "Something"
        }]
    }]
    "P4": "Something"
}

我想将其重组为:

"O1": {
    "P1": "Something",
    "P2": "Something",
    "P3": "Something"
}

我可以在构造函数的类中重建模型吗?如果是这样,我到目前为止还无法在线找到任何东西。

让我知道是否需要提供更多信息。

谢谢

2 个答案:

答案 0 :(得分:0)

在github中找到以下代码段: https://gist.github.com/penguinboy/762197

var flattenObject = function(ob) {
    var toReturn = {};

    for (var i in ob) {
        if (!ob.hasOwnProperty(i)) continue;

        if ((typeof ob[i]) == 'object') {
            var flatObject = flattenObject(ob[i]);
            for (var x in flatObject) {
                if (!flatObject.hasOwnProperty(x)) continue;

                toReturn[i + '.' + x] = flatObject[x];
            }
        } else {
            toReturn[i] = ob[i];
        }
    }
    return toReturn;
}

答案 1 :(得分:0)

让我们使用snippet which was proposed展平初始对象。然后我们可以过滤需要包含在最终对象中的那些属性:

 function filterObj(obj: any, propsForFilter: string[]) {
  const result = {};
  for (let prop in obj) {
    const filteredProp = propsForFilter.find(p => prop.includes(p));
    if (filteredProp) {
      result[filteredProp] = obj[prop];
    }
  }
  return result;
}
const flattened = flattenObject(obj);
console.log(flattened, filterObj(flattened, ['P1', 'P2']));

此方法filterObj接受属性数组,以便将它们包括在最终结果中。希望对您有帮助。