定制解析json

因项目需求,写了个可以定制的解析,主要实现类似@jsonproperty的功能,但由xml配置实现,可以动态改变返回的json数据格式,大体思路如下:


配置xml 文件,自定义标签,然后自己在程序中解析:


设置json读取转化的时候,需要自己实现一个策略:


具体实现接口为jackson中的org.codehaus.jackson.map.PropertyNamingStrategy接口,目前jackson已经默认实现org.codehaus.jackson.map.PropertyNamingStrategy.PropertyNamingStrategyBase,可以覆盖自定义方法org.codehaus.jackson.map.PropertyNamingStrategy.PropertyNamingStrategyBase#translate即可:


 /**
     *
     */
    private static class CapitalizedPropertyNamingStrategy extends PropertyNamingStrategy {




        @Override
        public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
            String nameSpace = field.getAnnotated().getDeclaringClass().getName();
            return translate(defaultName, nameSpace);
        }


        @Override
        public String nameForGetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) {
            String nameSpace = method.getAnnotated().getDeclaringClass().getName();
            return translate(defaultName, nameSpace);
        }


        @Override
        public String nameForSetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) {
            String nameSpace = method.getAnnotated().getDeclaringClass().getName();
            return translate(defaultName, nameSpace);
        }


        /**
         * @return
         * @throws Exception
         */
        public static HashMap<String, HashMap> readXml(String xmlPath) throws Exception {


            HashMap<String, HashMap> mapperMap = new HashMap<String, HashMap>();


            InputStream in = ClassLoader.getSystemResourceAsStream(xmlPath);
            loadXml(in, mapperMap);
            return mapperMap;
        }


        public String translate(String propertyName, String nameSpace) {
            try {
                if(null == xmlMap || null == xmlMap.get(nameSpace)){
                    HashMap<String, HashMap> configMap = new HashMap<String, HashMap>();
                    configMap = readXml(xmlPath);
                    xmlMap.put(nameSpace,configMap);
                }


            } catch (Exception e) {
                PlatformLogger.error("json序列化读取配置文件出错,错误原因" + e.getMessage());
            }




            if (null == xmlMap || null == xmlMap.get(nameSpace) || null == xmlMap.get(nameSpace).get(propertyName))
                return propertyName;


            return xmlMap.get(nameSpace).get(propertyName).toString();
        }


    }

读取到的配置文件再用dom4j进行解析:



这样功能即可实现,我们只需修改配置文件,可实现json可定制的转化大笑


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值