关于JSONArray.fromobject()⽅法转json乱序问题的解决⽅法
关于JSONArray.fromobject()⽅法转json乱序问题的解决⽅法
这是第⼀次在这⾥写博客,虽然打代码的,但仍怀揣着练好⽂笔的梦想,本⼈菜鸟⼀个,正在加强学习
这次在做数据库的课程设计时需要把查询的数据转成json传给前端,但是打印出来发现内容是乱序的,乱序的json传到前端我测试了⼀下显⽰不出来, 然后就开始解决办法。fastjson常用方法
据我查各种帖⼦得知,底层的JSONObject⽤的HashMap,所以在存⼊的时候就不会按顺序排列,解决办法如下:
1. 改源码,这个操作⽬测是最简单的,底层jsonobject的创建⼤概是这样,只需要把HashMap改为LinkedHashMap就⾏。但
是我在导源码和改的时候感觉不太对劲,也不是很懂怎么改,就放弃这种⽅法了
javascript JSONObject jsonObject = new HashMap();
2. 使⽤阿⾥巴巴的fastjson包,这个其实好像并没有解决这个问题,底层还是⽤hashmap,他有⼀个json转对象时的序列化设
置,但是没有对象转json序列化的设置,所以…放弃,不过fastjson还是⼀个好东西,有机会研究⼀下
3. 创建⼀个JSONArray,然后再创建⼀个LinkedHashMap的JSONObject,如下:
JSONArray jsonArray =new JSONArray();
for(User user : list){
JSONObeject jsonObject =new JSONObject(new LinkedHashMap<>());
jsonObject.put("username",Username());
jsonObject.put("sex",Sex());
jsonArray.add(jsonObject);
}
System.out.String());
(之前的代码被我删掉了,在⽹页直接撸出来的(应该没有错))
这个办法是可⾏的,但是有⽐较明显的缺陷,每个需要查询的实体类⾄少要写⼀遍这些代码,还有⼀些需要查询部分内容的
⽅法⼀个实体类就可能要写多遍了, 另外如果⼀个实体类有⽐较多属性的话,也会浪费时间写相同性质的代码,所以我产⽣
了造轮⼦的想法(按道理来说这个轮⼦应该已经有⼈造过了),然后满怀激动地造出来了,请看下⼀点
4. 我造的轮⼦其实其实很简单,⽽且就只能list转json,我⾃⼰也已经想出了这个⼯具的多个缺陷(但是⾃⼰写出来的东西⾃⼰
⽤的开⼼啊哈哈哈哈),先不⼀⼀多说,原理是反射,还有因为属性名设置的是全部⼩写的,但是set和get⽅法中⾸字母是
⼤写的,所以我另外写了⼀下将⾸字母⼤写的⼯具firstToUpper,但是现在看来好像并没有必要,只是短短的三⾏,⽤的频
率很低,下⾯上代码:
public class JSONUtils {
public static<T> String fromList(List<T> list) throws Exception{
//创建JSONObject
JSONArray jsonArray =new JSONArray();
for(T t : list){
JSONObject jo =new JSONObject(new LinkedHashMap<>());
//通过反射获得类中的成员变量们
Field[] fields = t.getClass().getDeclaredFields();
for(Field field : fields){
String Lname = Name();
String Uname = firstUpper.firstToUpper(Lname);
//通过反射获得get⽅法
Method method = t.getClass().getMethod("get"+ Uname);
//通过get⽅法获得值
Object value = method.invoke(t);
jo.put(Lname, value);
}
jsonArray.add(jo);
}
JSONString();
}
public static<T> String fromList(List<T> list , String[] exclusions) throws Exception{
JSONArray jsonArray =new JSONArray();
for(T t : list){
for(T t : list){
JSONObject jo =new JSONObject(new LinkedHashMap<>());
Field[] fields = t.getClass().getDeclaredFields();
for(Field field : fields){
for(String s : exclusions){
String Lname = Name();
if(s.equals(Lname)){
//该属性名需要排除
break;
}else{
/
/该属性名⽆需排除,添加进jsonObject中
String Uname = firstUpper.firstToUpper(Lname);
Method method = t.getClass().getMethod("get"+ Uname);
Object value = method.invoke(t);
jo.put(Lname, value);
}
}
}
jsonArray.add(jo);
}
JSONString();
}
}
缺陷很多,接下来开发应该也会遇到⼀些问题,会继续完善这个⼯具类原来json是不⽤排序的。。。。见笑了,这个⼯具类可能以后会⽤得到
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论