如何在Mat Table中打印此特定JSON?

时间:2019-05-06 08:21:01

标签: json angular parsing mat-table

我有一个不允许更改的特定JSON文件,它看起来像这样:

{
"computers" : {
        "John" : {
            "version" : "1.42.0",
            "environment" : "Default",
            "platform" : "x64",
            "admin" : "true"
        },
        "Peter" : {
            "version" : "1.43.6",
            "environment" : "Default",
            "platform" : "x64",
            "admin" : "true"
        },
        "Eric" : {
            "version" : "1.43.6",
            "environment" : "Default",
            "platform" : "x64",
            "admin" : "false"
        }
}

我使用JSON.parse()方法来解析文件,然后将其放入MatTableDataSource中。

问题是,当我需要在MatTable中显示它时,我无法真正按照自己的方式访问它。

我有一栏想要显示所有version参数,因此我不能说:this.dataSource.computers.????.version

你们知道我要去哪里吗?您是否知道我可以做些什么来解决这个问题?

期待您的阅读。

1 个答案:

答案 0 :(得分:1)

角度mat-table要求输入数据位于数组中。首先,我们使用Object.keys()提取键,其中将包含名称列表。然后,我们可以将Object.values()用于数组格式的每个键中的其他值。接下来,使用名称列表中的name属性映射上述数组对象。

const data = {
  "computers": {
    "John": {
      "version": "1.42.0",
      "environment": "Default",
      "platform": "x64",
      "admin": "true"
    },
    "Peter": {
      "version": "1.43.6",
      "environment": "Default",
      "platform": "x64",
      "admin": "true"
    },
    "Eric": {
      "version": "1.43.6",
      "environment": "Default",
      "platform": "x64",
      "admin": "false"
    }
  }
};

const nameList = Object.keys(data.computers);
const dataList = Object.values(data.computers).map((obj, index) => {
  obj['name'] = nameList[index];
  return obj;
});
console.log(dataList);