如何实现:json序列化一个对象时,结果是。。。。 >>点开看吧。

布谷歌 2019-07-10 05:12:22

先贴上来我写的一个util的代码:


/**
* 可以连续put的map工具
* @param <String>
* @param <T>
*/
public class MapPPP<String, T> implements Cloneable, java.io.Serializable{
private static final long serialVersionUID = 8683432581122892119L;

private Map<String, T> _map;

public MapPPP() {
_map = Maps.newHashMap();
}

public MapPPP<String, T> put(String key, T value) {
_map.put(key, value);
return this;
}

public int size() {
return _map.size();
}

public Set<Map.Entry<String, T>> entrySet() {
return _map.entrySet();
}
}


再看如下test代码:

public class TestMain {
public static void main(String[] args) {
MapPPP<String, String> replaceDataMap = new MapPPP<>();
replaceDataMap.put("a", "v1").put("dddd", "").put("c","");

System.out.println(JSONObject.toJSONString(replaceDataMap));
}
}



运行结果是:{"map":{"a":"v1","c":"","dddd":""}}
而我期望的结果是:{"a":"v1","c":"","dddd":""}
如何实现?100分,请高手指点!
...全文
88 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
布谷歌 2019-07-10
  • 打赏
  • 举报
回复
引用 2 楼 别闹腰不好 的回复:
MapPPP 类里的_map 属性拿出来,之后再去转就可以了 。
我想实现的是,序列化这个MapPPP对象,就像大家序列化一个Map对象那样,直接把里面的key、value序列化出来。
刍 狗 2019-07-10
  • 打赏
  • 举报
回复
楼主我给你两个锦囊:(你确定你那个工具可以执行?可以的话只看第一个,不可以的话看第二个锦囊,我给你改了改,亲测可用) 第一个: 假如你的工具真的可用的话,你改下你的main方法就好了: public class TestMain { public static void main(String[] args) { MapPPP<String, String> replaceDataMap = new MapPPP<>(); replaceDataMap.put("a", "v1").put("dddd", "").put("c",""); MapPPP<String, Map> res= new MapPPP<>(); res.put("地图", replaceDataMap._map); System.out.println(JSONObject.toJSONString(res._map)); } } 第一个:(修改后的代码) /** * * @author yoyo * @version $Id: Test.java, v 0.1 2019年07月10日 17:35 yoyo Exp $ */ public class MapPPP<T> implements Cloneable, java.io.Serializable{ private static final long serialVersionUID = 8683432581122892119L; private Map<String, T> _map; public MapPPP() { _map = Maps.newHashMap(); } public MapPPP<T> put(String key, T value) { _map.put(key, value); return this; } public int size() { return _map.size(); } public Set<Map.Entry<String, T>> entrySet() { return _map.entrySet(); } public static void main(String[] args) { MapPPP<String> replaceDataMap = new MapPPP(); replaceDataMap.put("a", "v1").put("dddd", "").put("c",""); MapPPP<Map> map = new MapPPP(); map.put("地图", replaceDataMap._map); System.out.println(JSONObject.toJSONString(replaceDataMap._map)); System.out.println(JSONObject.toJSONString(map._map)); } } 还有有个事情,不知道你这个是要做序列化和反序列化呢,还是只是实现个map转json。目前你这情况实现的功能只是将一个map对象通过JSONObject.toJSONString()的方法转化为了json格式而已。你要是想做序列化和反序列化的话(注意序列化和反序列化的精髓是:持久化存储java对象 或 网络传输java对象 或 跨jvm复制对象属性,而不是单纯的在一个jvm上做转换,建议看下序列化和反序列化概念和使用场景),应该是这种玩法: ** * * @author yoyo * @version $Id: SerializeUtil.java, v 0.1 2018年12月12日 15:09 yoyo Exp $ */ public class SerializeUtil { private static final String PATH = "d://serializes/"; static { File file = new File(PATH); if(!file.exists()){ file.mkdir(); } } /** * serialize the object * @param clazz * @param <T> */ public static <T> void serialize(T clazz){ try { OutputStream os = new FileOutputStream(PATH + File.separator + clazz.getClass().getName() + SubfixEnum.TXT.getCode()); ObjectOutputStream ops = new ObjectOutputStream(os); ops.writeObject(clazz); ops.close(); } catch (IOException e) { e.printStackTrace(); } } /** * deserialize the object * @param clazz * @param <T> * @return */ public static <T> T deserialize(Class<T> clazz){ try { InputStream is = new FileInputStream(PATH + File.separator + clazz.getName() + SubfixEnum.TXT.getCode()); ObjectInputStream ips = new ObjectInputStream(is); T t = (T)ips.readObject(); ips.close(); return t; } catch (Exception e) { e.printStackTrace(); return null; } } public static void main(String[] args) { SerializeUtil.serialize(new Person("张三11", 12, "男", true)); Person person = SerializeUtil.deserialize(Person.class); System.out.println(person); }
别闹腰不好 2019-07-10
  • 打赏
  • 举报
回复
MapPPP 类里的_map 属性拿出来,之后再去转就可以了 。
布谷歌 2019-07-10
  • 打赏
  • 举报
回复
看了半天java.util.HashMap和java.util.ArrayList的源码,还是没看出来端倪

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧