angularjs - Strikt datatyp för json-fil


När jag får datan från json skapar jag först en klass och definierar alla variabler jag får i json för strikt datatyp som min json-fil är

 {"fname":"Mark","lname":"jhony"}

så i Angular gör jag klassen på det här sättet

export class user{

 fname: string;
 lname : string;
}

Jag är förvirrad över hur man skapar klassen för följande JSON-data

{"fname":"Mark","lname":"jhony",
 "parcels":[
   {
    "parcelId":123,
    "parcelName :"asd",
    "parcelItems:[
       { 
        "itemId":2,
        "itemName":"perfume"
       },
       { 
         "itemId":4,
         "itemName":"soap"
       }
     ]
]}

Jag försökte lägga till en array i klassen men förstår inte vad som skulle vara det bästa sättet att hantera det i AngularJS.

Svar #1

Vanligtvis skulle du använda ett gränssnitt för att representera en datastruktur av primitiva värden, till exempel:

interface ParcelItem {
  itemId: number;
  itemName: string;
}
interface Parcel {
  parcelId: number;
  parcelName: string;
  parcelItems: ParcelItem[];
}
interface User {
  fname: string;
  lname: string;
  Parcels: Parcel[];
}

Beroende på hur du skaffar JSON och tolkar det kan du ange vilken gränssnitt som ska användas. Det mest enkla exemplet skulle vara:

const user = JSON.parse(userJson) as User;

Om du vill använda en klass, kanske för associerade metoder för datamanipulering, måste du instansiera klassen med en konstruktor. Detta kan se ut så här:

const userValues = JSON.parse(userJson);
const user = new User(userValues);

Svar #2

Detta skulle fungera.

export interface ParcelItemType {    
    itemId: number;
    itemName: string;
}

export interface ParcelType {
    parcelId: number;
    parcelName: string;
    parcelItems: ParcelItemType[];
}

export interface YourType {
   fname: string;
   lname: string;
   parcels: ParcelType[];
}