Javascript JSON对象的Typescript模型类

Javascript JSON对象的Typescript模型类,javascript,json,angular,oop,typescript,Javascript,Json,Angular,Oop,Typescript,我有以下JSON: { "-KtDGS8GdOcJ33Lcqjok": { "2017": { "address": "test address 1", "area2": "3212", "author": "STOkzlbT4OeOcbO2ed9Z7dvxZk92", "category": "Solar", "client": "Test Contact", "createdAt": 15

我有以下JSON:

{
"-KtDGS8GdOcJ33Lcqjok": {
    "2017": {
        "address": "test address 1",
        "area2": "3212",
        "author": "STOkzlbT4OeOcbO2ed9Z7dvxZk92",
        "category": "Solar",
        "client": "Test Contact",
        "createdAt": 1504551753483,
        "lastEdited": 1504551805648,
        "lastEditedBy": "STOkzlbT4OeOcbO2ed9Z7dvxZk92",
        "lat": "18.490362758827665",
        "lng": "-69.93279173970221",
        "name": "17002 - test",
        "pictures": {
            "a95ff256-0f05-3122-a6b5-a88d3fd14c3f": true
        },
        "price": "213",
        "province": "-KtDBavhyLhrpV8hDuj2",
        "sector": "-KtDBqgy3CqpTv6c_iQ9",
        "totalPrice": "1234",
        "year": "2017"
    }
},
"-KtDGaU9BB6eNj-MsyBg": {
    "2015": {
        "address": "test 2a",
        "area1": "3245",
        "author": "STOkzlbT4OeOcbO2ed9Z7dvxZk92",
        "category": "Local: comercio",
        "client": "test2 ",
        "createdAt": 1504552100747,
        "lastEdited": 1504552100747,
        "lastEditedBy": "STOkzlbT4OeOcbO2ed9Z7dvxZk92",
        "lat": "18.489417118875462",
        "level": "4",
        "lng": "-69.92930956184864",
        "name": "15002 - test2a ",
        "parking": "12",
        "plaza": "Agora",
        "price": "213",
        "province": "-KtDBavhyLhrpV8hDuj2",
        "restrooms": "2",
        "sector": "-KtDBqgy3CqpTv6c_iQ9",
        "totalPrice": "213",
        "year": "2015"
    },
    "2017": {
        "address": "test 2",
        "area1": "3245",
        "author": "STOkzlbT4OeOcbO2ed9Z7dvxZk92",
        "category": "Local: comercio",
        "client": "test2 ",
        "createdAt": 1504551790632,
        "lastEdited": 1504551790632,
        "lastEditedBy": "STOkzlbT4OeOcbO2ed9Z7dvxZk92",
        "lat": "18.489417118875462",
        "level": "4",
        "lng": "-69.92930956184864",
        "name": "17003 - test2b",
        "parking": "12",
        "plaza": "Agora",
        "price": "213",
        "province": "-KtDBavhyLhrpV8hDuj2",
        "restrooms": "2",
        "sector": "-KtDBqgy3CqpTv6c_iQ9",
        "totalPrice": "213",
        "year": "2017"
    }
},
"codeCounter": {
    "2015": 2,
    "2017": 5
},
"totals": {
    "2015": 1,
    "2017": 5
} 
}
它基本上是一个对象列表,每个对象都包含一个或多个嵌套对象,这些对象在制作年份包装(实际上是房屋、公寓等)

我遇到的问题是试图映射“年”对象(2017年、2015年等),因为它们可能存在,也可能不存在。例如,一个对象可能有2017、2016两个条目,或者只有一个条目,等等

我已经有了一个我认为有效的“Property”模型类,它包含所有地址、作者、类别等字段。我正在尝试创建outter类,该类将包含以下属性对象的列表:

export interface PropertyWrapper {
  [year: number]: Property;
}
我尝试将JSON解析为PropertyRapper[]数组,这样我就可以通过调用:

for (const pw of data) {
        console.log(pw[2017]);
      }

但这只起作用,因为我已经知道该对象有一个“2017”条目。无论是否有“2017”、“2010”或10个条目,我如何动态地执行此操作?

您正在寻找类似的内容吗。 首先获取对象键,然后遍历这些键,然后遍历嵌套的对象键

var jso={
“-KtDGS8GdOcJ33Lcqjok”:{
"2017": {
“地址”:“测试地址1”,
“区域2”:“3212”,
“作者”:“STOkzlbT4OeOcbO2ed9Z7dvxZk92”,
“类别”:“太阳能”,
“客户”:“测试联系人”,
“createdAt”:1504551753483,
“最近编辑”:1504551805648,
“最新编辑人”:“STOkzlbT4OeOcbO2ed9Z7dvxZk92”,
“lat”:“18.490362758827665”,
“液化天然气”:“-69.93279173970221”,
“名称”:“17002-测试”,
“图片”:{
“a95ff256-0f05-3122-a6b5-a88d3fd14c3f”:正确
},
“价格”:“213”,
“省”:“-KtDBavhyLhrpV8hDuj2”,
“扇区”:“-KtDBqgy3CqpTv6c_iQ9”,
“总价”:“1234”,
“年份”:“2017年”
}
},
“-KtDGaU9BB6eNj MsyBg”:{
"2015": {
“地址”:“测试2a”,
“区域1”:“3245”,
“作者”:“STOkzlbT4OeOcbO2ed9Z7dvxZk92”,
“类别”:“本地:comercio”,
“客户端”:“test2”,
“createdAt”:1504552100747,
“最近编辑”:1504552100747,
“最新编辑人”:“STOkzlbT4OeOcbO2ed9Z7dvxZk92”,
“lat”:“18.489417118875462”,
“级别”:“4”,
“液化天然气”:-69.92930956184864“,
“名称”:“15002-test2a”,
“停车”:“12”,
“广场”:“广场”,
“价格”:“213”,
“省”:“-KtDBavhyLhrpV8hDuj2”,
“洗手间”:“2”,
“扇区”:“-KtDBqgy3CqpTv6c_iQ9”,
“总价”:“213”,
“年份”:“2015年”
},
"2017": {
“地址”:“测试2”,
“区域1”:“3245”,
“作者”:“STOkzlbT4OeOcbO2ed9Z7dvxZk92”,
“类别”:“本地:comercio”,
“客户端”:“test2”,
“createdAt”:1504551790632,
“最近编辑”:1504551790632,
“最新编辑人”:“STOkzlbT4OeOcbO2ed9Z7dvxZk92”,
“lat”:“18.489417118875462”,
“级别”:“4”,
“液化天然气”:-69.92930956184864“,
“名称”:“17003-test2b”,
“停车”:“12”,
“广场”:“广场”,
“价格”:“213”,
“省”:“-KtDBavhyLhrpV8hDuj2”,
“洗手间”:“2”,
“扇区”:“-KtDBqgy3CqpTv6c_iQ9”,
“总价”:“213”,
“年份”:“2017年”
}
},
“编解码器”:{
"2015": 2,
"2017": 5
},
“总数”:{
"2015": 1,
"2017": 5
} 
};
Object.keys(jso.forEach)函数(key){
Object.key(jso[key]).forEach(函数(nestedKey){
log(`nestedKey:${nestedKey}\n`,jso[key][nestedKey]);
});

});太棒了,这很有效。甚至不必使用模型类。谢谢