V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jmyz0455
V2EX  ›  程序员

Json 存储三级菜单这样写正确吗?

  •  
  •   jmyz0455 · 2017-10-17 23:33:43 +08:00 · 3088 次点击
    这是一个创建于 2589 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个类似 学校>专业>班别:学生人数 的数据结构,需要用到 json 来存储,这种类似三级菜单的 json 我还没写过,认真看了 http://www.json.org ,写出

    {
        "aaa": [
            {
                "aa1": [
                    {
                        "a11": "111"
                    }
                ]
            }
        ],
        "bbb": [
            {
                "bb1": [
                    {
                        "b11": "111"
                    }
                ]
            },
            {
                "bb2": [
                    {
                        "b21": "111"
                    },
                    {
                        "b22": "222"
                    }
                ]
            }
        ]
    }
    

    格式在 www.bejson.com 校验过没问题,但是看着很“啰嗦”。网上貌似没人提过多级 json 的写法。请问用 json 写三级的数据还有更简洁的写法吗?

    10 条回复    2017-10-18 20:56:25 +08:00
    markocen
        1
    markocen  
       2017-10-18 07:09:19 +08:00 via Android
    为啥每层都包在一个数组里
    jmyz0455
        2
    jmyz0455  
    OP
       2017-10-18 07:29:30 +08:00
    @markocen 因为每一层都有可能是有多个数据的,不包数组的话在 www.bejson.com 里校验会出错,请问你觉得可以再怎么简化。
    bxb100
        3
    bxb100  
       2017-10-18 10:26:36 +08:00 via Android
    我是用 ajax
    mkeith
        4
    mkeith  
       2017-10-18 14:45:47 +08:00
    @markocen 数组里面顺序不会变吧
    jmyz0455
        5
    jmyz0455  
    OP
       2017-10-18 15:39:33 +08:00
    @mkeith 如果不怕顺序变呢?结构还可以更简单一点?
    jmyz0455
        6
    jmyz0455  
    OP
       2017-10-18 15:39:58 +08:00
    @bxb100 ?什么意思
    ztaober
        7
    ztaober  
       2017-10-18 17:05:10 +08:00
    学校-专业-班别-学生人数 同级别 list 存不可以吗 操作的时候在处理
    jmyz0455
        8
    jmyz0455  
    OP
       2017-10-18 19:48:12 +08:00
    @ztaober 问题是现在希望请求一次,获取一个 json 数据就完事。数据量不大,就是层级复杂,我想在单个 json 数据上减少层数而不是分开几个地方储存。
    seognilV2
        9
    seognilV2  
       2017-10-18 20:53:07 +08:00 via Android
    只用一层的方案:

    school1: {
    from: null,
    name: '野鸡大学',
    sub: ['class1', 'class2'],
    type: 'school'
    }

    class1: {
    from: 'school1',
    name: '三年二班',
    sub: ['student1', 'student2'],
    type: 'class'
    }

    student1: {
    from: 'class1',
    name: '李狗蛋',
    sub: null,
    type: 'student'
    }
    seognilV2
        10
    seognilV2  
       2017-10-18 20:56:25 +08:00 via Android
    类似这样
    好处是灵活,无论增删改查
    另外我建议任何情况下 demo 的假数据都写得真实一点比较好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1856 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:37 · PVG 00:37 · LAX 08:37 · JFK 11:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.