如何将不同名称的JSON对象映射到TS模型?
我正在使用Angular(7.x.x)的最新版本。 我有一个JSON API,看起来像:如何将不同名称的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": {
{
"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;
}));
}