`
lvjun106
  • 浏览: 439242 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖
社区版块
存档分类
最新评论

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 对象进行了过渡处理。希望大家在使用过程中注意,或者有其他解决方案也希望亲能给我留言,期待完美方案。

分享到:
评论

相关推荐

    sjson, 具有 Scala 对象序列化功能的Scala Json.zip

    sjson, 具有 Scala 对象序列化功能的Scala Json sjson: Scala 中的透明JSON序列化sjson为 Scala 对象提供非侵入性序列化。 可以使用sjson来序列化内置类型。基本通用数据类型和你设计的任何自定义数据类型。 现在...

    Scala数据序列化Scalavro.zip

    Avro是一个数据序列化系统,设计用于支持大 批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理 Avro数据。 ...

    scala-json

    6. **序列化与反序列化**:JSON库通常包含序列化和反序列化功能,允许我们将JSON数据转换为或从Scala的case类或自定义对象中恢复。 7. **兼容性**:考虑到与其他系统的交互,一个良好的JSON库应该支持JSON标准,并...

    scala-schema:Scala类的JSON模式生成,验证和反序列化

    这种方法比使用json4s序列化机制更快。 支持案例类,列表,字符串,日期,数字,布尔值和映射(当键为字符串时) 通过特征支持多态:在同一程序包中找到特征实现 使用注释自定义架构(如最小/最大大小,描述) ...

    json4s-scalaz_2.11-3.2.9.zip

    4. `json4s-jackson`:另一个JSON序列化器,使用Jackson库进行序列化和反序列化。 5. 示例和测试代码:展示如何使用JSON4S和Scalaz进行实际操作。 在处理这个压缩包时,开发者通常会解压后导入项目到IDE,例如...

    avro4s:Scala的Avro模式生成和序列化反序列化

    Avro类型到Scala类型的免模板反序列化 注意:本文参考4.0发行版。 模式 与Json不同,Avro是基于架构的格式。 您会发现自己想要频繁生成模式,而手工或通过基于Java的SchemaBuilder类编写模式对于复杂的域模型而言...

    seriala:Scala 序列化

    Scala 的序列化库。 这是在实验阶段,开始作为一种尝试新的 Scala 2.10,现在更新为 Scala 2.11。 设计目标 可序列化的对象应该是常规的 Scala 类(没有注释,没有基本特征) 支持多种格式; 当前 JSON(使用 ...

    钻探:Scala中高效的CBOR和JSON(反序列化)

    总的来说,"钻探:Scala中高效的CBOR和JSON(反序列化)"这个主题涉及到使用Scala开发的Borer库,该库致力于提供高效的CBOR和JSON反序列化解决方案。它可能是通过优化的算法、类型安全的设计和充分利用Scala的编程...

    序列化测试-java

    Fastjson是阿里巴巴开源的一个高性能的JSON库,不仅支持JSON与Java对象之间的转换,还提供了序列化和反序列化功能。在处理大量数据时,Fastjson表现出了优秀的性能。它可以将Java对象直接转换为JSON字符串,反之亦然...

    scala-json-benchmark:比较不同 Scala JSON 库的使用和速度

    该项目还演示了如何使用这些不同的 JSON 库来反序列化 Scala case class 。 当然,我们也提供了运行基准测试和生成测试数据的代码,可能有用.ja关于图书馆其中一些库(Rapture 和 Json4s)使用 ,Java JSON 解析库...

    java8stream源码-json-binders:Scala/Scala.JS的Json序列化器

    的库,它允许您序列化/反序列化 Scala 案例类、原始类型到/从 JSON 表示。 为什么是 json 绑定器? 已经存在许多用于相同目的的库,例如scala/pickling upickle 、 upickle 、 spray-json面向 Scala 和FasterXML/...

    pushka, 带注释的纯 Scala 序列化库.zip

    pushka, 带注释的纯 Scala 序列化库 Pushka Pushka是一个没有任何运行时反射实现的序列化库。 为了达到良好的输出JSON和良好性能,它创建了。 Pushka在 Scala ( 2.10,2.11,2.12 ) 和 Scala.js. 上工作良好动机大

    akka-http-json:将Scala中最好的JSON库与Akka HTTP集成

    "akka-http-json"项目就是为了解决这个问题,它提供了将Scala中最佳的JSON库与Akka HTTP整合的工具,使得开发者可以方便地进行JSON序列化和反序列化。 首先,我们需要理解Akka HTTP的核心特性。它提供了一个低级的...

    Serializations:序列化和反序列化的一些代码

    - **Pickling**:Scala Pickling提供了一种简单的方式来序列化和反序列化Scala对象,支持多种格式,如JSON、Binary和XML。 - **Shapeless**:虽然主要是一个类型级编程库,但Shapeless也可以用于编译时的序列化和...

    scala-json-collection_2.9.1-1.1.1.zip

    这个特定的库可能提供了序列化和反序列化JSON的能力,使得开发人员能够轻松地将JSON字符串转换为Scala集合,如List、Map等,反之亦然。这极大地方便了数据的读取、解析和写入,特别是在与服务器进行交互或者处理API...

    bottledynamo:Scala中使用Twitter Futures进行Circe JSON序列化的AWS DynamoDB抽象足够好

    在本文中,我们将深入探讨`bottledynamo`项目,这是一个专门为Scala开发的库,它利用Twitter Futures和Circe库来实现对AWS DynamoDB的高效、流畅的JSON序列化和操作。`bottledynamo`是针对无SQL数据库系统的持久层...

    kafka-serde-scala:隐式将类型类编码器转换为kafka序列化器,反序列化器和Serde

    总之,`kafka-serde-scala`简化了在Scala项目中使用Kafka时的序列化和反序列化工作。它支持多种流行的数据格式(如JSON、Avro、Protobuf),并且能够自动从类型类编码器构建`Serde`,极大地提高了开发效率。通过这个...

    desert:Scala的二进制序列化库

    二进制序列化通常比基于文本的序列化(如 JSON 或 XML)更高效,因为它产生的数据量较小,但在某些情况下可能更难以阅读和调试。 Desert 库的核心目标是提供一种简洁、快速且安全的方式来处理 Scala 对象的序列化,...

    mtp-3.0.1343.zip

    Upickle库提供了一个简洁的API,使得在Scala中进行JSON序列化和反序列化变得非常直观。 其次,**MessagePack**是另一种高效的二进制序列化格式,它比JSON更节省空间,速度也更快。MessagePack设计的目标是提供一种...

    messagepackKafkaSerde:Kafka序列化器反序列化器,可与MessagePack格式的消息一起使用,并将其反序列化为JSON,然后序列化为Byte数组,该数组打算在Apache Druid数据库中使用

    **MessagePackKafkaSerde** 是一个专门为Apache Kafka设计的序列化和反序列化工具,它支持MessagePack格式的消息,并能将其转换为JSON以及Byte数组,以适应在Apache Druid数据库中的使用。MessagePack是一种轻量级的...

Global site tag (gtag.js) - Google Analytics