Fastjson JSONArray深度副本目录
快速JSON JSON阵列深度拷贝
1、网络社交(对象);
2,AddAll;
3、序列化副本;
总结:
有几种方法可以深度复制fajstjson JSONArray类型的数据?
1、网络社交(对象);代码:
publicstaticvoidmain (字符串[ ] args ) throws IOException,classnotfoundexception ) testnewjsonarr ); } publicstaticvoidtestnewjsonarr () system.out.println ) (===========) ) ); JSONArray oneArr=new JSONArray (; JSONObject one=new JSONObject (; one.put(one,) fish ); onearr.add(one ); nDHC=newJSONArray(onearr ); system.out.println (init : one arr : ) onearr.tostring ); system.out.println (init : two arr : ) twoARR.tostring ); system.out.println ((======add bird========() ) ) ) ) ) ) ); JSONObject two=new JSONObject (; two.put(two,) bird ); twoarr.add(two; system.out.println (' change : one arr : ' one arr.tostring ); system.out.println (' change : two arr : ' two arr.tostring ); system.out.println ('=====fail=======' ); } 结果:
======newjsonarrayfail=======init : one arr : [ { ' one ' : ' fish ' } ] init 3360 two arr 3360 [ { ' one======add bird=====change : one arr : [ { ' one ' : ' fish ' },{ ' two ' : ' bird ' } ] change 33: 详细原因请看newJSONarray ) object )
2,AddAll;代码:
publicstaticvoidmain (字符串[ ] args ) throws IOException,classnotfoundexception ) testaddalljsonarr ); } publicstaticvoidtestaddalljsonarr () system.out.println (=========) ); JSONArray oneArr=new JSONArray (; JSONObject one=new JSONObject (;
one.put("one","fish"); oneArr.add(one); fndhc = new JSONArray(); twoArr.addAll(oneArr); System.out.println("init: oneArr: "+ oneArr.toString()); System.out.println("init: twoArr: "+ twoArr.toString()); System.out.println("====== add bird ======="); JSONObject two = new JSONObject(); two.put("two","bird"); twoArr.add(two); System.out.println("change: oneArr: "+ oneArr.toString()); System.out.println("change: twoArr: "+ twoArr.toString()); System.out.println();}结果:
====== put all success =======init: oneArr: [{"one":"fish"}]init: twoArr: [{"one":"fish"}]====== add bird =======change: oneArr: [{"one":"fish"}]change: twoArr: [{"one":"fish"},{"two":"bird"}]allAll的方式行得通
3,串行化复制;
代码:
public static void main(String[] args) throws IOException, ClassNotFoundException { testDeppCopyJsonArr();}public static void testDeppCopyJsonArr() throws IOException, ClassNotFoundException { System.out.println("====== serializable success ======="); JSONArray oneArr = new JSONArray(); JSONObject one = new JSONObject(); one.put("one","fish"); oneArr.add(one); fndhc = CloneUtils.clone(oneArr);; System.out.println("init: oneArr: "+ oneArr.toString()); System.out.println("init: twoArr: "+ twoArr.toString()); System.out.println("====== add bird ======="); JSONObject two = new JSONObject(); two.put("two","bird"); twoArr.add(two); System.out.println("change: oneArr: "+ oneArr.toString()); System.out.println("change: twoArr: "+ twoArr.toString()); System.out.println();}
串行化代码:
public class CloneUtils { public static <T extends Serializable> T clone(T src) throws IOException, ClassNotFoundException { ObjectInputStream ois = getInputStream(src); //返回生成的新对象 @SuppressWarnings("unchecked") T cloneObj = (T) ois.readObject(); ois.close(); return cloneObj; } public static <T> List<T> deepCopy(List<T> src) throws IOException, ClassNotFoundException { ObjectInputStream ois = getInputStream(src); @SuppressWarnings("unchecked") List<T> dest = (List<T>) ois.readObject(); ois.close(); return dest; } public static <K,V> Map<K,V> cloneMap(Map<K,V> src) throws IOException, ClassNotFoundException { ObjectInputStream ois = getInputStream(src); @SuppressWarnings("unchecked") Map<K, V> result = (Map<K, V>) ois.readObject(); ois.close(); return result; } private static ObjectInputStream getInputStream(Object src) throws IOException, ClassNotFoundException { //写入字节cmdmn out = new ByteArrayOutputStream(); ObjectOutputStream obs = new ObjectOutputStream(out); obs.writeObject(src); obs.close(); //分配内存,写入原始对象,生成新对虚幻的小笼包 ios = new ByteArrayInputStream(out.toByteArray()); return new ObjectInputStream(ios); }}
结果:
====== serializable success =======init: oneArr: [{"one":"fish"}]init: twoArr: [{"one":"fish"}]====== add bird =======change: oneArr: [{"one":"fish"}]change: twoArr: [{"one":"fish"},{"two":"bird"}]总结:
在使用fastjon 和谐的胡萝卜时候,一般用第二种addAll的方式,如果大量使用,也可以考虑用第三种方式。