Scala json转复杂对象(含数组)的工具类

友友之前接手同事的代码的时候,被一整溜儿的 JSONObject.get 给妥妥的震惊了。作为一个java面向对象开发的信徒外加强迫症,实在无法接受这种写法,于是,二话不说,给他改。

scala是基于Java开发的,所以,理论上,java能实现的方法,scala也是可以实现的。

但是对于列表元素是对象的json转化,java的那些方法似乎不是那么好使,以下是好使代码

pom:

        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-scala_${scala.binary}</artifactId>
            <version>2.9.5</version>
        </dependency>

工具类:

import com.fasterxml.jackson.annotation.JsonInclude.Include
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper, SerializationFeature}
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import org.apache.commons.lang3.StringUtils

object JsonParse {

  /**
   * Jackson ObjectMapper
   */
  val om = new ObjectMapper()
    .setSerializationInclusion(Include.NON_NULL)
    .enable(SerializationFeature.INDENT_OUTPUT)
    .registerModule(DefaultScalaModule)
    .configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true)
    .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

  /**
   * json 2 对象
   * @param json
   * @param clazz
   * @tparam T
   * @return
   */
  def formatJson[T](json: String, clazz: Class[T]): T = if (StringUtils.isBlank(json)) null.asInstanceOf[T] else om.readValue(json, clazz)

  /**
   * 对象 2 json
   * @param v
   * @return
   */
  def toJson(v: Any): String = om.writeValueAsString(v)
}

实体类:

class Entitys {

  var dimensions: Array[Entity] = _
}

case class Entity(id: String, name: String, `type`: String)

调用:

val entity = try JsonParse.formatJson(jsonString, classOf[Entity])
    catch {
      case e: Throwable => throw new RuntimeException("Invalid json", e)
    }
    entity 

搞定,收工~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值