【问题标题】:JSON to typescript class, interface?JSON到打字稿类,接口?
【发布时间】:2017-02-19 18:24:11
【问题描述】:

我正在尝试使用 Angular2 和 Typescript 开发一个 weppapp。我有一个这样的json:

{
"homeMenu":{
    "aname1":{
        "title":"text",
        "route":"myroute"
    },
    "aname2":{
        "title":"text",
        "route":"myroute"
    },
    "aname3":{
        "title":"text",
        "route":"myroute"
    },
    "aname4":{
        "title":"text",
        "route":"myroute",
        "homeMenu":{
            "aname41":{
                "title":"text",
                "route":"myroute"
            },
            "aname42":{
                "title":"text",
                "route":"myroute"
            }
        }
    },
    "aname5":{
        "title":"text",
        "route":"myroute"
    }
}}

我想要一些我不知道的类或接口,生成这种类型的 json。我试过但没有成功,对我来说,我需要 3 个包含所有菜单、一个类菜单和类子菜单的菜单。我有一些类似的东西,但我的 json 上没有例如“aname1”、“aname2”...

一开始我认为它不是一个有效的 JSON,我用一个 json 验证器进行了测试,他是有效的。所以我需要一些帮助来实现这一目标 谢谢:)

【问题讨论】:

  • 所以菜单项可以是菜单本身?总是homeMenu?因为顶部菜单是homeMenu,然后在aname4 中还有另一个homeMenu
  • 是的,但是 aname41 和 42 没有主菜单。这是最后一个孩子
  • 但是规则是什么?它总是homeMenu 还是可以是任何字符串?
  • 始终主页菜单

标签: javascript json typescript


【解决方案1】:

根据您的 json 和我的 cmets 的答案,您可以使用接口:

interface HomeMenu {
    [name: string]: MenuItem;
}

interface MenuItem {
    title: string;
    route: string;
    homeMenu?: HomeMenu;
}

interface Menu {
    homeMenu: HomeMenu;
}

let json: Menu = {
    "homeMenu": {
        "aname1": {
            "title": "text",
            "route": "myroute"
        },
        "aname2": {
            "title": "text",
            "route": "myroute"
        },
        "aname3": {
            "title": "text",
            "route": "myroute"
        },
        "aname4": {
            "title": "text",
            "route": "myroute",
            "homeMenu": {
                "aname41": {
                    "title": "text",
                    "route": "myroute"
                },
                "aname42": {
                    "title": "text",
                    "route": "myroute"
                }
            }
        },
        "aname5": {
            "title": "text",
            "route": "myroute"
        }
    }
}

(code in playground)

【讨论】:

  • 谢谢!!,但是这里你的变量已经包含了菜单,没有那个我可以使用它吗?并使用模板角度生成?像 test = new menu(aname) 然后 test.addMenuItem(title,route) ?最后,当我使用 json.stringify(HomeMenu) 时,我会完成 json 吗?
  • 我不确定我是否理解你。你能更好地解释一下你的情况吗?
  • 好吧,对不起,我有这个 json。我想开发一个带有 angular2 和 typescript 的应用程序,我的目标是使用 GUI 输入菜单、此菜单的子菜单、另一个菜单……最后,当您提交时,代码会生成包含所有信息的 json前一步。我尝试了一些类示例:this.Menu = new Menu(this.name, this.isRedacMenu); this.Navigation.addMenu(this.Menu);而 this.Smenu = new Smenu(this.sname); this.Navigation.homeMenu[this.index].addSMenu(this.Smenu);但我没有相同的json。我可以和你的代码有相同的 json 吗?
  • 好吧,我不知道界面是如何工作的。现在我有另一个问题,如何在 homeMenu 对象中添加另一个 menuItem ?我没有推送或其他东西,我试图扩展数组但没有成功,总是索引未定义:(提前感谢
猜你喜欢
  • 2019-06-01
  • 2017-09-02
  • 2017-09-26
  • 1970-01-01
  • 2023-03-07
  • 2018-10-10
  • 2019-03-26
  • 2020-08-14
  • 2019-05-04
相关资源
最近更新 更多