当前位置: 首页 > 工具软件 > Scala JSON > 使用案例 >

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

叶裕
2023-12-01

友友之前接手同事的代码的时候,被一整溜儿的 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 

搞定,收工~

 类似资料: