scala json 序列化与反序列化
转[http://blog.csdn.net/pztyz314151/article/details/52958495]
最近是用Scala开发了一个项目,其中有个环节需要将类似Tuple2[String, Map[String, Case class]]对象作为中间结果缓存至Redis中。
中间对象结构如下:
case class TestDO(var id :Int = 0, var value : String = null) case class Test2DO(var arrayBuffer: ArrayBuffer[TestDO] = null) Tuple2[String, Map[String, Test2DO]]
tuple2是需要缓存的数据结构。
缓存redis,第一时间想到的是序列化,序列化与反序列化代码如下
/** * 序列化 * @param obj * @return */ def serialize(obj: Object): Array[Byte] = { try { val baos = new ByteArrayOutputStream(); val oos = new ObjectOutputStream(baos); oos.writeObject(obj) val array: Array[Byte] = baos.toByteArray oos.close() baos.close() array } catch { case e: Exception => println(e) null } } /** * 反序列化 * @param bytes * @return */ def deSerialize(bytes : Array[Byte]) :Object ={ try{ val bais = new ByteArrayInputStream(bytes) val ois=new ObjectInputStream(bais) val obj=ois.readObject() bais.close() ois.close() obj }catch { case e: Exception => println("deSerialize" + e) null } }
在本机的开发测试过程中,序列化这个很完美,没有出现丝毫任何错误。但是当我丢到集群环境运行行,出现了大量反序列化的错误,说无法找到Test2DO这个class。各种查错,最后发现集群环节是jdk 1.7,而本机开发环境是jdk1.8。初步觉得可能是这个原因导致的~~~然后验证了,结论就不在此阐述了。
考虑到开发部署的方便性,最后选择将中间结果以json的格式缓存至redis。这个时候便开始用scala转json了。
第一个是阿里开源出来的fastjosn,第二个是gson,感觉都不错.maven 中的依赖如下:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.36</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3.1</version> </dependency>
演示过程:
单个case calss
arraybuffer
输入
val gson = new Gson()
println(gson.toJson(Test2DO(ArrayBuffer(TestDO(1, "12"), TestDO(1, "12"), TestDO(1, "12")))))
输出
{"arrayBuffer":{"initialSize":16,"array":[{"id":1,"value":"12"},{"id":1,"value":"12"},{"id":1,"value":"12"},null,null,null,null,null,null,null,null,null,null,null,null,null],"size0":3}}
Map,Set, List等类似
相信大家已经看出了跟javabean对象tojson之后的不一样,因为项目周期的原因,博主这边做了一个土鳖的方法,将上述scala对象全部转出了Java对象进行tojson保存至redis之中,然后在取出json转化成javabean对象在转化成scala 对象进行了过渡处理。希望大家在使用过程中注意,或者有其他解决方案也希望亲能给我留言,期待完美方案。
下一篇: 层序遍历,或者说是结构完全三叉树
推荐阅读
-
Json序列化和反序列化方法解析
-
JQUERY JSON的反序列化类 using问题的解决方法
-
python开发pickle和json序列化及json配置文件常见问题
-
详解Python中的序列化与反序列化的使用
-
PHP常见的序列化与反序列化操作实例分析
-
jQuery序列化form表单数据为JSON对象的实现方法
-
ASPNET中JSON的序列化和反序列化的方法
-
C#实现XML与实体类之间相互转换的方法(序列化与反序列化)
-
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
-
序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询 多表关联查询