如何观察具有不同属性名称的地图嵌套json对象-Angular

时间:2019-01-20 11:04:55

标签: json angular primeng primeng-treetable

我有一个包含嵌套对象的json结果。我需要将它们强制转换为具有与json结果不同的属性名称的自定义对象(原始ng树表json)。

JSON消息:

{
      brinname: "Aamir",
      aantalPersonen: "122",
      signalenVestiging: [
        {
          vestiging: "Ranchi",
          aantalPersonen: "102",
          signalenCode: [
            {
            signaalCode: "4",
            aantalPersonen: "15"
           },
          {
            signaalCode: "5",
            aantalPersonen: "15"
          } ]
        }, {
          vestiging: "Bangalore",
          aantalPersonen: "82",
          signalenCode: [
            {
              signaalCode: "6",
              aantalPersonen: "15"
            },
            {
              signaalCode: "7",
              aantalPersonen: "15"
            } ]
        } ]

    },
    {
      brinname: "Abhinav",
      aantalPersonen: "122",
      signalenVestiging: [
        {
          vestiging: "Bangalore",
          aantalPersonen: "102",
          signalenCode: [ {
            signaalCode: "7",
            aantalPersonen: "15"
          }]
        } ]

必需格式

[{
  "data":
  [
    {
      "data":{
        "name":"Aamir",
        "aantalPersonen":"122",
      },
      "children":[
        {
          "data":{
            "name":"Ranchi",
            "aantalPersonen":"102",

          },
          "children":[
            {
              "data":{
                "signaalCode":"4",
                "aantalPersonen":"15",
              }
            },
            {
              "data":{
                "signaalCode":"5",
                "aantalPersonen":"10",
              }
            },

          ]
        },
        {
          "data":{
          vestiging: "Bangalore",
          aantalPersonen: "82",
          },
          "children":[
            {
              "data":{
                signaalCode: "6",
              aantalPersonen: "15"
              }
            }
          ]
        }
      ]
    }
     ,
    {
      "data":{
         brinname: "Abhinav",
      aantalPersonen: "122",

      },
      "children":[
        {
          "data":{
             vestiging: "Bangalore",
          aantalPersonen: "102",
          }
        },
       "children":[
            {
              "data":{
                "signaalCode":"4",
                "aantalPersonen":"15",
              }
            }
      ] ]
    } 

  ]
}]

那么,我怎么能这样映射json ?:有人可以给我一个演示示例。这是一个新的角度,解决它遇到了很多麻烦。对我来说真的是很大的帮助。

1 个答案:

答案 0 :(得分:1)

我假设“ json结果”来自后端调用。因此,最好,最简单的方法是将可观察对象映射到目标格式。

  1. 您应该使用HttpClient(对后端的调用将使您返回一个Observable)-> https://angular.io/guide/http

  2. 创建一个接口,该接口将描述json对象的字段名称(我们称其为PersonalDetails):

     id disch_date visit_date
1: 1234 2018-03-14 2018-03-17
2: 1234 2018-03-17 2018-03-17
3: 1234 2018-04-19 2018-04-30
4: 2345 2018-04-15 2018-05-12
5: 2345 2018-05-15       <NA>
6: 3456 2018-05-16 2018-05-16

可以有多个接口(json对象的确很大,因此最好拆分它并创建其他接口,这些接口将嵌套在第一个接口中)。

  1. 为'prime ng tree table json'创建接口=>与上面相同,我们称其为PrimeNgTableData

  2. 创建一个函数,该函数将使用类型为'PersonalDetails'的参数(从点2开始),并将其强制转换为第二个接口PrimeNgTableData(从点3开始)。让我们这样命名该函数:

  export interface PersonalDetails {
   brinname: string,
   aantalPersonen: string,
   ...
}
  1. 创建新的可观察对象,它将保留primeNgTableData值:
  export function asPrimeNgTableData(personalDetails: PersonalDetails): PrimeNgTableData {
   return {
      ...
    }
  }
  1. 在您的html模板中使用primeNgTableData $(假设您要使用的html标签称为“ ngTable”,它会获得“数据”输入,其类型为PrimeNgTableData
   private personalDetails$: Observable<PersonalDetails> = this.someServiceThatCallsHttp.getPersonalDetails();

   private primeNgTableData$: Observable<PrimeNgTableData> = this.personalDetails$.pipe(
      map((personalDetails: PersonalDetails) => asPrimeNgTableData(personalDetails))
    );