美文网首页
枚举类型的嵌套使用

枚举类型的嵌套使用

作者: bobozhangshao | 来源:发表于2020-06-30 15:53 被阅读0次

在一次营销组件化的开发中。依赖方小伙伴强烈要求我们提供工具包用来解析类似黑盒的大json串串。小伙伴们并不想理解黑盒内容,但是想获取他们需要的叶子节点的数值。

{
    "data": {
        "creator": "{\"id\":\"666666\",\"name\":\"大头\",\"prefix\":\"dt666666\"}",
        "name": "大头大头下雨不愁",
        "dateRange": "{\"start\":\"2020-06-30 00:00:00\",\"end\":\"2020-06-30 23:59:59\"}",
        "activityTemplate": "0",
        "periodAndRule": "[{\"weekday\":\"2\",\"timeRange\":{\"start\":\"00:00:00\",\"end\":\"23:59:59\"},\"rule\":[{\"condition\":1200,\"discount\":100,\"shopSubsidy\":100,\"elemeSubsidy\":0}]}]",
        "userDayOrderLimit": "{\"limit\":\"1\"}",
        "userScope": "0"
    },
    "instanceId": 423014
}

问题来了,怎么方便又快速拿到叶子节点的值呢?在我们营销组件的场景下data下面的值是可以枚举的,而且枚举可以表示很多营销模型的意义。那么将这种json的转化为有父枚举类型嵌套结构,能准确表达出json的对象关系。

public enum  MktField{

    NAME("name",null,"活动名称"),

    /**
     * 创建者对象
     */
    CREATOR("creator", null,"创建者"),
    CREATOR_ID("id", CREATOR,"创建者ID"),
    CREATOR_NAME("name", CREATOR, "创建者name"),
    CREATOR_PREFIX("prefix", CREATOR, "前缀"),
    CREATOR_TYPE("creatorType", null,"创建者类型"),
    
    ......


    public String key;
    public MktField parent;
    public String title;

    MktField(String key, MktField parent, String title) {
        this.key = key;
        this.parent = parent;
        this.title = title;
    }
    
    ......
}

剩下的就写一个小工具来方便提取具体含义的值就好了。这种结构对递归太友好,所以我直接用了递归。这样根据枚举值以及大json对象,就能方便的黑盒方式获取叶子的值了。

private static Object getMktFieldValue(MktField field, JSONObject fieldMetaJson){
        try {
            JSONObject oj;
            if (field.getParent() == null) {
                return fieldMetaJson.get(field.getKey());
            } else {
                if (getMktFieldValue(field.getParent(), fieldMetaJson) instanceof String){
                    oj = JSON.parseObject((String) getMktFieldValue(field.getParent(), fieldMetaJson));
                } else {
                    oj = (JSONObject) getMktFieldValue(field.getParent(), fieldMetaJson);
                }
            }
            return oj.get(field.getKey());
        }catch (Exception e){
            return null;
        }
    }

相关文章

  • 枚举类型的嵌套使用

    在一次营销组件化的开发中。依赖方小伙伴强烈要求我们提供工具包用来解析类似黑盒的大json串串。小伙伴们并不想理解黑...

  • Swift学习笔记十五之嵌套类型

    1、类型嵌套//可以在允许类型嵌套的类型中嵌套枚举、类、结构体,并且支持多层嵌套2、值类型的嵌套struct Ne...

  • Swift 5.1 (18) - 嵌套类型

    Swift允许定义嵌套类型,在它们所支持类型的定义中支持嵌套枚举,类和结构。类型可以嵌套到所需的级别。 嵌套类型使...

  • Nested Types

    为了表示更复杂的结构,swift中类、结构体和枚举可以使用内嵌类型 在结构体中嵌套枚举的复杂实例 //Neste...

  • swift嵌套类型

    swift允许在一个类型中嵌套定义另一个类型,即嵌套类型。可以在枚举类型、类和结构体中定义支持嵌套的类型,可以定义...

  • Swift 基础笔记 - 枚举

    枚举 OC定义和使用枚举 Swift定义枚举类型 Swift判断枚举类型 枚举成员类型

  • TS学习笔记(6)-枚举类型

    枚举类型 ========= 知识点 枚举类型的定义方法 枚举类型的使用方法 代码

  • SpringBoot 入门笔记(七)自定义枚举类型

    定义枚举类 在抛出异常中使用枚举类型 异常处理类中接受枚举类型

  • Swift编程二十(嵌套类型)

    案例代码下载 嵌套类型 通常创建枚举以支持特定类或结构的功能。类似地,定义仅仅在更复杂类型的上下文中使用的通用类和...

  • 汇编分析闭包本质

    引用类型的赋值操作 值类型、引用类型的let 嵌套类型 枚举、结构体、类都可以定义方法 思考?: 方法占用实例对象...

网友评论

      本文标题:枚举类型的嵌套使用

      本文链接:https://www.haomeiwen.com/subject/obyxqktx.html