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": "杭州"}。请问大家有什么好的方案,谢谢。
我曹,握草,窝草,我屮艸芔茻,这么简单的问题也不会
######回复 @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());
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。