Java中json key 替换

RunningDream 发布于 2017/06/02 11:54
阅读 805
收藏 1

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

加载中
0
开源中国封号艹你妈
开源中国封号艹你妈

我曹,握草,窝草,我屮艸芔茻,这么简单的问题也不会

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

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

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

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

0
青衣不恋
青衣不恋

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

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

遍历也是一种方法 

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

0
chaozhang
chaozhang

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());
    }
}

 

返回顶部
顶部