【问题标题】:Restructuring JSON Response in Angular 2+在 Angular 2+ 中重构 JSON 响应
【发布时间】:2019-02-01 06:11:10
【问题描述】:

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

我将如何在 Angular 2+/Typescript 中执行此操作?

任何帮助将不胜感激。

假设我有这样的事情:

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

我想将其重组为:

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

我可以在构造函数的类中重建模型吗?如果是这样,我还没有在网上找到任何东西。

如果我需要提供任何进一步的信息,请告诉我。

谢谢

【问题讨论】:

  • 嘿,您想要对象中的所有原始值及其各自的键吗?
  • 不是全部,只是特定的值 - 有些嵌套很深,有些则没有。

标签: json angular typescript


【解决方案1】:

在 github 中找到了这个 sn-p: 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;
}

【讨论】:

  • 谢谢哈米德,这确实使 json 变平了,但我得到 atm 的响应非常复杂,并且数组中有数百个对象等,所以我需要具体说明我在展平数据中获得的价值.有没有办法选择要包含在新对象中的属性?
【解决方案2】:

让我们使用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 接受属性数组,以便将它们包含在最终结果中。希望这对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 2018-06-08
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多