开发者社区> 问答> 正文

Java中json key 替换? 400 报错

Java中json key 替换? 400 报错

现有一个需求就是动态的转换json中key的属性。背景:一个中间系统,负责转发http请求(就是承接上游系统多对一的问题),请求数据格式是json。例:A系统-上游系统,B系统-中间系统,C系统-下游系统。当A系统发送请求的时候,携带的json需要B系统进行相应的转换,满足下游C系统的json格式,然后推送下游C系统。如A系统发送的json:{"countyName": "上城区", "provinceName": "浙江", "cityName": "杭州"},转换成C系统需要的json:{"county": "上城区", "province": "浙江", "city": "杭州"}。请问大家有什么好的方案,谢谢。

展开
收起
优选2 2020-06-05 16:47:01 669 0
1 条回答
写回答
取消 提交回答
  • 我曹,握草,窝草,我屮艸芔茻,这么简单的问题也不会

    ######回复 @love青椒炒蛋 : 现在有一种实现方式了,只是感觉不太好,想看看有没有更好的实现方法而已。######

    key之间的转换有没有规则,没有规则只能一个有一个set进去

    ######回复 @RunningDream : 加载进内存再好采用Map的形式,不要用list 循环######回复 @RunningDream : 查库也可以,但是你可以把对应关系加载进内存,这样就不用频繁读库了######回复 @赵传喜 : 可以设置规则,现在我的做法是数据库中配置key设置关系,如a=b。但是这样就要解析json,然后一个个匹配,然后生成一个新的json。这样速度和性能就不行######

    三套JSON不行么?A系统发送的json,{A系统JSONKey:C系统JSONKey},C系统的json。

    ######

    之前做easyUI的tree的时候,遇到过这个问题。当时直接改的bean的属性名。

    后来又一次做的时候,试过json.toString.replace

    遍历也是一种方法 

    就记得最开始看api的时候,好像找到一种更好的方法,最近做的时候,死活想不起来

    ######

    toString全局替换,或者自己重写一下序列化

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.serializer.JSONSerializer;
    import com.alibaba.fastjson.serializer.NameFilter;
    import com.alibaba.fastjson.serializer.PropertyPreFilter;
    import com.alibaba.fastjson.serializer.SerializeWriter;
    import com.alibaba.fastjson.serializer.SerializerFeature;
    class JsonSerialTest {
        public JSONArray jsonSerial(Object object){
            SerializeWriter out = new SerializeWriter();
            JSONSerializer serializer = new JSONSerializer(out);
            serializer.config(SerializerFeature.WriteDateUseDateFormat, true);
            serializer.config(SerializerFeature.DisableCircularReferenceDetect, true);
            serializer.getNameFilters().add(new NameFilter()
            {
    
                @Override
                public String process(Object object, String propertyName,
                        Object propertyValue)
                {
                    if (propertyName.matches("(?i)\\b[a-z]*id\\b"))//key以id结尾置换为id
                        return "id";
                    if (propertyName.matches("(?i)\\b[a-z]*name\\b"))//key以name结尾置换为name
                        return "name";
                    if ("startTime".equals(propertyName))
                        return "name";
                    return propertyName;
                }
            });
            serializer.write(object);
            return JSON.parseArray(out.toString());
        }
    }

     

    2020-06-08 11:31:44
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载