angular - Typescript: Konverter JSON-objekt til en klasse-/interface-objekt


Jeg prøver å konvertere et API-svar til en TypeScript-klasse/grensesnitt.

Her returnerer API-en en liste over objekter med noen egenskaper, men jeg trenger bare noen få av egenskapene til responsobjektet.

API-respons eksempel:

    [{
    'Id' : 1,
    'Name': 'test',
    'Description: 'Test',
    'PropertyX': 'x',
    'PropertyY' : 'y'
    },
    ...]

Typescript-klasse


    Class Response {
     Id: string;
     Name: string;
    }

Kan du vennligst foreslå for meg hva som vil være den beste tilnærmingen for å konvertere JSON-objektet til et TypeScript-objekt.

Svar #1

Jeg vil foreslå å lage et grensesnitt som beskriver egenskapene du bruker i appen din og ignorere resten:

Så forutsatt at svaret ditt ser slik ut:

const response = [{
      'Id' : 1,
      'Name': 'test',
      'Description': 'Test',
      'PropertyX': 'x',
      'PropertyY' : 'y'
    }, {
      'Id' : 2,
      'Name': 'test2',
      'Description': 'Test2',
      'PropertyX': 'x2',
      'PropertyY' : 'y2'
    }
];

og du kun er interessert i Id og Name, bare opprett et grensesnitt slik:

interface IMyObject {
  Id: String;
  Name: String;
}

da kan du i resten av appen din caste responsen til IMyObject[]

For eksempel hvis en funksjon bruker svaret ditt:

function myFunction(response: IMyObject[]) { ... }

eller hvis du trenger å returnere den typen, kan du gjøre en direkte typekonvertering slik:

return response as MyObject[];

REDIGER: Som nevnt i kommentaren nedenfor, fjerner det å bare kaste objektet ditt til IMyObject ikke de ekstra egenskapene du ikke er interessert i.

For å gjøre det, bruk .map:

const formattedResponse: IMyObject = reponse.map(item => {
  Id: item.Id,
  Name: item.Name
});

Svar #2

Du kan bruke forEach-metoden og lage et nytt objekt med egenskapene du trenger.

myarray=[];
 ngOnInit() {
     this.myvalues();

  }


    myMethod()
        {
           const response = [{
            'Id' : 1,
            'Name': 'test',
            'Description': 'Test',
            'PropertyX': 'x',
            'PropertyY' : 'y'
          }, {
            'Id' : 2,
            'Name': 'test2',
            'Description': 'Test2',
            'PropertyX': 'x2',
            'PropertyY' : 'y2'
          }
        ];

        response.forEach(value=>{
         this.myarray.push(
               {
                'ID':value.Id,
               'Name':value.Name
              }
            )
        });
        console.log(this.myarray);

ARBEIDENDE DEMO

Relaterte artikler