繁体   English   中英

JSON对象的Typescript模型类

[英]Typescript model class for JSON object

我有以下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年条目或其中之一,依此类推。

我已经有一个相信可以使用的“属性”模型类,它具有所有地址,作者,类别等字段。 我正在尝试创建将包含这些属性对象列表的外部类:

export interface PropertyWrapper {
  [year: number]: Property;
}

我尝试将JSON解析为PropertyWrapper []数组,通过这种方式,我已经可以通过调用以下方式访问属性:

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

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

您在寻找这样的东西吗? 首先获取对象键,然后遍历这些键,然后遍历嵌套的对象键

 var jso = { "-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 } }; Object.keys(jso).forEach(function(key) { Object.keys(jso[key]).forEach(function(nestedKey){ console.log(`nestedKey: ${nestedKey} \\n ` , jso[key][nestedKey]); }); }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM