如何将不同名称的JSON对象映射到TS模型?

如何将不同名称的JSON对象映射到TS模型?,json,angular,typescript,mapping,Json,Angular,Typescript,Mapping,我正在使用Angular(7.x.x)的最新版本。 我有一个JSON API,看起来像: { "objectA": { "a": { "aa": "hello", "ab": "xyz" }, "b": null, "c": { "ca": null, "cb": null, "cc": null, "cd": "hi", "ce": null, "cf": null } }, "objectB": { "a": {

我正在使用Angular(7.x.x)的最新版本。 我有一个JSON API,看起来像:

{
  "objectA": {
  "a": {
    "aa": "hello",
    "ab": "xyz"
   },
"b": null,
"c": {
  "ca": null,
  "cb": null,
  "cc": null,
  "cd": "hi",
  "ce": null,
  "cf": null
    }
 },

  "objectB": {
  "a": {
    "aa": "hey",
    "ab": "abc"
   },
  "b": null,
  "c": {
    "ca": null,
    "cb": null,
    "cc": null,
    "cd": null,
    "ce": null,
    "cf": null
  }
}, ...}
我的所有对象都具有相同的结构。现在我想把它们映射到一个typescript对象中

我的模型看起来像:

 export interface MyObject {
 name: string;
 a: A;
 b?: any;
 c: C;}

 export interface C{
 ca?: any;
 cb?: any;
 cc?: any;
 cd?: any;
 ce?: any;
 cf?: any;}

 export interface A {
 aa: string;
 ab: string;
 ac?: string;}
如何将对象的名称(如“objectA”)放入接口“object”的变量“name”中。因此,我想返回一个对象数组

我的服务:

 getResults(): Observable<MyObject[]> {
return this.http.get<MyObject[]>(this.url, {
  headers: this.headers
 })
有人能帮我吗?提前感谢。

getResults():可观察{
getResults(): Observable<MyObject[]> {
    return this.http.get<ApiResponse>[]>(this.url, {
        headers: this.headers
    }).pipe(map((response: ApiResponse) => {
        const myObjs: MyObject[] = [];
        Object.keys(response).forEach((key) => {
            // Now you have the "name" value
            myObjs.push({
                ...response[key],
                name: key
            };
        });
        return myObjs;
    }));
}
返回this.http.get[]>(this.url{ headers:this.headers }).pipe(映射)(响应:ApiResponse)=>{ 常量myobjects:MyObject[]=[]; Object.keys(response).forEach((key)=>{ //现在您有了“name”值 推({ …响应[键], 姓名:key }; }); 返回myobj; })); }

Object.keys()是获取要放入名称中的值的关键。我没有在运行环境中测试这一点,但它会让您更接近您的解决方案。您需要一个接口来表示API的响应。这是您真正从http.get请求的。然后您将它映射到MyObject[]的响应.

您可以使用
startsWith('object')
识别每个不同的“条目”请给出所需的结果示例JSON响应是数组吗?您如何为这样一个重复的对象创建模型?
getResults(): Observable<MyObject[]> {
    return this.http.get<ApiResponse>[]>(this.url, {
        headers: this.headers
    }).pipe(map((response: ApiResponse) => {
        const myObjs: MyObject[] = [];
        Object.keys(response).forEach((key) => {
            // Now you have the "name" value
            myObjs.push({
                ...response[key],
                name: key
            };
        });
        return myObjs;
    }));
}