最近在迁移一份代码的时候,遇到一些问题。
要解决的问题如下:
需要把 days , type , list<planTrip> 封装为一个JSONObject对象,然后传给另一个web项目,在另一个web项目中再去获取这个对象,进行处理之后,返货一个map<integer,map<>>对象,通过JSONObject再回去,再解析。
//构造需要传输的map对象
Map<Integer,LinkedList<Point>> map=new HashMap<>();
LinkedList<Point> linkedPoint=new LinkedList<>(); for (int i = 0; i < 5; i++) { Point p=new Point(); p.setName(i+"name"); linkedPoint.add(p); } LinkedList<Point> linkedPoint2=new LinkedList<>(); for (int i = 0; i < 5; i++) { Point p=new Point(); p.setName(i+"Name"); linkedPoint2.add(p); } map.put(1,linkedPoint); map.put(2,linkedPoint2); JSONArray key=new JSONArray(); JSONArray value=new JSONArray(); for (Map.Entry<Integer, LinkedList<Point>> entry : map.entrySet()) { LinkedList<Point> dayPlan=new LinkedList<>(entry.getValue()); Integer index=entry.getKey(); key.add(index); value.add(dayPlan); } for (int i = 0; i <key.size() ; i++) { System.out.println(key.get(i)); JSONArray a=value.getJSONArray(i); System.out.println(value.get(i)); for (int j = 0; j <a.size() ; j++) { Point p=(Point)JSONObject.toBean(a.getJSONObject(j),Point.class); System.out.printf("%s",p.getName()); } } System.out.println(); JSONObject resultJ = new JSONObject(); resultJ.put("key",key); resultJ.put("value",value);
//解析得到的行程优化结果 Map<String, Map<Integer, LinkedList<Point>>> resultPlans=new IdentityHashMap<>(); JSONObject resultJo=JSONObject.fromObject(resultJ.toString()); JSONArray keyJa=resultJo.getJSONArray("key"); JSONArray valueJ=resultJo.getJSONArray("value"); String cityCode="123"; System.out.println(keyJa.size()+"hello"); for (int i = 0; i <keyJa.size() ; i++) { System.out.println(valueJ.getJSONArray(i)+"hello2"); } for (int i = 0; i <keyJa.size() ; i++) { Map<Integer,LinkedList<Point>> resultValue=new HashMap<>(); Integer k=keyJa.getInt(i); JSONArray a=valueJ.getJSONArray(i); System.out.println(keyJa.getInt(i)+"hello"); System.out.println(valueJ.getJSONArray(i)+"hello2"); LinkedList<Point> pointsLiked=new LinkedList<>(); for (int j = 0; j <a.size() ; j++) { Point p=(Point)JSONObject.toBean(a.getJSONObject(j),Point.class); pointsLiked.add(p); System.out.printf("%s",p.getName()); } resultValue.put(k,pointsLiked); String cc=new String(cityCode); resultPlans.put(cc,resultValue); }
=============关于map中key相同的问题 ===============
Map<String, Map<Integer, LinkedList<Point>>> resultPlans=new IdentityHashMap<>();
//使用了IndentityHashMap对象但是需要注意的是,假设key只是string类型,那么要注意key不能是同一个string对象,否则map依然会覆盖比如:string s="lxx";string m="lxx";map.put(s,"12");map.put(m,"23"); //map 里面依然是只有一条记录而下面的就是两条记录:
string s=new String("lxx");string m=new String("lxx");map.put(s,"12");map.put(m,"23"); //map 里面依然是有两条记录
后来公司同事说其实有另一个类可以用来代替这个的
可以直接使用 multiMap这个类,就可以存储相同key了的。
================ 关于JSONObject
1.JSONObject在很多包里,但在在net网站里面用的比较多一些,然而有些方法不同包里面对象是不一样的。
JSONObject resultJo=JSONObject.fromObject(resultJ.toString());//字符串转换为JSONObject JSONArray keyJa=resultJo.getJSONArray("key"); //获取JsonArray2.由JSONObject对象准转换为JavaBean
Point p=(Point)JSONObject.toBean(a.getJSONObject(j),Point.class);