Scala自定义封装类生成Json字符串

1、需求

自定义实现Scala封装类,能够设定key-value值,并生成Json格式字符串,value值类型为任意,生成方法满足多级Json格式的需要

2、实践开发

2.1、引入pom依赖

通过Scala实现使用json4s依赖实现,也可以使用阿里的fastjson依赖
pom依赖如下:

    
      org.json4s
      json4s-native_${scala.version}
      3.6.1
    

2.2、Scala代码实现

package cn.ScalaCustoms

import org.json4s.DefaultFormats
import org.json4s.native.Json

import scala.collection.mutable.Map

/**
  * @Author: Henry
  * @Description: 封装类生成JSON字符串
  * @Date: Create in 2019/5/27 12:30
  **/

class JsonOne{

  private var converMap:Map[String,Any] = Map()
  private var moreMap:Map[String,Any] = Map()
  private var IsAddMoreData = false


  /**
    * @描述 : 辅助构造器
    * @参数 : Data: Tuple2[String,Any]
    * @创建时间 : 2019/5/27
    */
  def this(Data: Tuple2[String,Any]) {
    this()      // 调用主构造器
  }

  /**
    * @描述 : 添加一级json
    * @参数 : Data: Tuple2[String,Any]
    * @返回值 : Map[String,Any]
    * @创建时间 : 2019/5/27
    */
  def dataAdd(Data: Tuple2[String,Any]):Map[String,Any]={
    this.converMap
    this.converMap += ( Data._1 -> Data._2 )
  }

  /**
    * @描述 : 添加二级json
    * @参数 : Data: Tuple2[String,Any]
    * @返回值 : Map[String,Any]
    * @创建时间 : 2019/5/27
    */
  def moreAdd(Data: Tuple2[String,Any]):Map[String,Any]={
    this.moreMap
    this.moreMap += (Data._1 -> Data._2)
  }

  /**
    * @描述 : 设置二级json pair的 key 值
    * @参数 : Type: String
    * @返回值 : Map[String,Any]
    * @创建时间 : 2019/5/27
    */
  def moreSet(Type: String):Map[String,Any]={
    this.converMap
    this.moreMap
    this.converMap += ( Type -> this.moreMap )
  }

  /**
    * @描述 : 获取json字符串对应Map格式
    * @返回值 : Map[String,Any]
    * @创建时间 : 2019/5/27
    */
  def getData:Map[String,Any] =
    this.converMap

  /**
    * @描述 : 重写toString方法,构造Json字符串
    * @返回值 : String
    * @创建时间 : 2019/5/27
    */
  override def toString: String = {
    val JsonStr = Json(DefaultFormats).write(converMap).toString
    JsonStr
  }

}

2.3、对象使用方法

有两种方法创建Json字符串的实现方法

  • Way1:
    1. Step1:创建JsonOne对象,val eg = new JsonOne()
    2. Step2: 添加一级json ,使用dataAdd方法,eg.dataAdd(“I”,6)
    3. Step3: 添加二级json ,先调用moreAdd方法添加二级pair ,eg.moreAdd(“I”,6)
    4. Step4:设置二级json ,再调用moreSet方法,设置二级pair的key,eg.moreSet(“D”)
      Way2:
    5. Step1:创建JsonOne对象,val eg = new JsonOne()
    6. Step2: 添加一级json ,使用dataAdd方法,eg.dataAdd(“I”,6)
    7. Step3:创建二级Map,如val de = Map(“Id” -> 66 , “Value” -> 0.96 )
    8. Step4:添加一级,使用dataAdd方法,eg.dataAdd(“data”,de)

3、功能实现

3.1、Way1方法运行

Main函数如下:

package cn.test

import cn.ScalaCustoms.JsonOne

import scala.collection.mutable.Map

/**
  * @Author: Henry
  * @Description: ${description}
  * @Date: Create in 2019/5/27 14:41 
  **/
object test {
  def main(args: Array[String]): Unit = {

    val json1 = new JsonOne()
    val de = Map("Id" -> 66 , "Value" -> 0.96 )   //  添加二级data json
    json1.dataAdd("data",de)

    json1.dataAdd("type", "mypay_Equip")     //  添加一级 json

    println("JSON 格式: " + json1)
    println("Map 格式: " + json1.getData)
  }
}

运行结果:
Scala自定义封装类生成Json字符串_第1张图片

3.2、Way2方法运行

Main函数如下:

package cn.test

import cn.ScalaCustoms.JsonOne

import scala.collection.mutable.Map

/**
  * @Author: Henry
  * @Description: ${description}
  * @Date: Create in 2019/5/27 14:41 
  **/
object test {
  def main(args: Array[String]): Unit = {

    val json1 = new JsonOne()

    json1.dataAdd("type", "mypay_Equip")     //  添加一级 json
    
    json1.moreAdd("Id",66)  //  添加二级data json
    json1.moreAdd("Value", "0.96")
    json1.moreSet("data")
    json1.moreAdd("time",6.16)
    json1.moreSet("data")
    
    println("JSON 格式: " + json1)
    println("Map 格式: " + json1.getData)
  }
}

运行结果:
Scala自定义封装类生成Json字符串_第2张图片

4、补充

Scala中class 和 case class 的区别:
本质上来讲,class case class用起来就是一样的: 最不一样的一个东西:如果我们scala要做模式匹配,去匹配类型的话,建议使用case case 因为scala的底层对它做了优化,匹配起来性能较好。

  1. :case class 自动生成伴生对象,自动实现了apply方法
  2. :case class 用于做匹配,性能较好(scala的底层做过优化)
  3. :case class 默认实现了序列化 Serializable
  4. :case class 默认实现了toString、equals、equals 和 hashCode等方法
  5. :case class 主构造函数 里面没有修饰符,默认的是val
  6. :case class 初始化的时候可以不用new,当然也可以加上,class 类一定需要加new

你可能感兴趣的:(Scala学习,Scala,Json,自定义类,自定义对象)