Fastjson JSONObject深度复制 您所在的位置:网站首页 plc模拟量输出控制什么 Fastjson JSONObject深度复制

Fastjson JSONObject深度复制

2023-09-06 00:37| 来源: 网络整理| 查看: 265

Fastjson JSONObject深度复制

目录

Fastjson JSONObject深度复制

1,new JSONObject (Object) - 失败

2,Put All;

3,串行化复制;

总结:

如何对fajstjson JSONObject类型的数据进行深度复制,有几种方式呢?

 

1,new JSONObject (Object) - 失败

 

代码:

public static void main(String[] args) throws IOException, ClassNotFoundException {     testNewJson(); } public static void testNewJson(){     System.out.println("====== new JSONObject fail =======");     JSONObject one = new JSONObject();     one.put("one","fish");     JSONObject two = new JSONObject(one);     System.out.println("init: one: "+ one.toString());     System.out.println("init: two: "+ two.toString());     System.out.println("====== add grass =======");     two.put("two","grass");     System.out.println("change: one: "+ one.toString());     System.out.println("change: two: "+ two.toString());     System.out.println("====== new JSONObject fail ======="); }

 

结果:

====== new JSONObject fail ======= init: one: {"one":"fish"} init: two: {"one":"fish"} ====== add grass ======= change: one: {"one":"fish","two":"grass"} change: two: {"one":"fish","two":"grass"} ====== new JSONObject fail =======

new JSONObject(one) 这种方式失败了 new JSONObject(Object)深复制失败的原因​​​​​​​

2,Put All;

代码:

public static void main(String[] args) throws IOException, ClassNotFoundException {     testPutAllJson(); } public static void testPutAllJson(){     System.out.println("====== put all =======");     JSONObject one = new JSONObject();     one.put("one","fish");     JSONObject two = new JSONObject();     two.putAll(one);     System.out.println("init: one: "+ one.toString());     System.out.println("init: two: "+ two.toString());     System.out.println("====== add fox =======");     two.put("two","fox");     System.out.println("change: one: "+ one.toString());     System.out.println("change: two: "+ two.toString());     System.out.println(); }

结果:

====== put all ======= init: one: {"one":"fish"} init: two: {"one":"fish"} ====== add fox ======= change: one: {"one":"fish"} change: two: {"one":"fish","two":"fox"}

 putAll的方式行得通

 

3,串行化复制;

 

代码:

public static void main(String[] args) throws IOException, ClassNotFoundException {     testDeppCopyJson(); } public static void testDeppCopyJson() throws IOException, ClassNotFoundException {     System.out.println("====== serializable success =======");     JSONObject one = new JSONObject();     one.put("one","fish");     JSONObject two =  CloneUtils.clone(one);     two.putAll(one);     System.out.println("init: one: "+ one.toString());     System.out.println("init: two: "+ two.toString());     System.out.println("====== add wolf =======");     two.put("two","wolf");     System.out.println("change: one: "+ one.toString());     System.out.println("change: two: "+ two.toString());     System.out.println(); }

 

串行化代码:

public class CloneUtils { public static T clone(T src) throws IOException, ClassNotFoundException { ObjectInputStream ois = getInputStream(src); //返回生成的新对象 @SuppressWarnings("unchecked") T cloneObj = (T) ois.readObject(); ois.close(); return cloneObj; } public static List deepCopy(List src) throws IOException, ClassNotFoundException { ObjectInputStream ois = getInputStream(src); @SuppressWarnings("unchecked") List dest = (List) ois.readObject(); ois.close(); return dest; } public static Map cloneMap(Map src) throws IOException, ClassNotFoundException { ObjectInputStream ois = getInputStream(src); @SuppressWarnings("unchecked") Map result = (Map) ois.readObject(); ois.close(); return result; } private static ObjectInputStream getInputStream(Object src) throws IOException, ClassNotFoundException { //写入字节流 ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream obs = new ObjectOutputStream(out); obs.writeObject(src); obs.close(); //分配内存,写入原始对象,生成新对象 ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray()); return new ObjectInputStream(ios); } }

 

结果:

====== serializable success ======= init: one: {"one":"fish"} init: two: {"one":"fish"} ====== add wolf ======= change: one: {"one":"fish"} change: two: {"one":"fish","two":"wolf"}

 

总结:

   在使用fastjon JSONObject复制的时候,一般用第二种putAll的方式,如果大量使用,也可以考虑用第三种方式。

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有