Scala【json字符串和json對象互相轉換】


一.fastjson工具

pom依賴

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>

Json字符串<->對象


import com.alibaba.fastjson.JSON
import com.alibaba.fastjson.serializer.SerializeFilter
import java.util
import scala.beans.BeanProperty

/**
 * @description: fastjson工具實現Json轉換
 * @author: HaoWu
 * @create: 2020年09月07日
 */
object FastJsonDemo {
  def main(args: Array[String]): Unit = {
    //json對象中包含json數組
    val jsonStr =
      """
        |{
        | "schoolName":"A",
        | clazzs:[{"className":"1001"},{"className":"1002"},{"className":"1003"}]
        |}
        |""".stripMargin
    /*************************** json字符串->對象 ***************************************/
    val school = JSON.parseObject(jsonStr,classOf[School])
    //取schoolName
    val name = school.schoolName
    println(name)
    //Java的List轉Scala的List , 注意:舊版過時,新版的Scala用這個:import scala.collection.JavaConverters._
    import scala.collection.JavaConversions._
    school.clazzs.asScala.foreach(x=>println(x.className))

    /*************************** 對象->json字符串 ***************************************/
    val schoolStr: String = JSON.toJSONString(school, null.asInstanceOf[Array[SerializeFilter]])
    println(schoolStr)
  }
}
//使用fastJson將對象轉json字符串的時候必須加上@BeanProperty
//轉JSON對象需要用java里面的List,導入java.util包
case class School(@BeanProperty schoolName:String,@BeanProperty clazzs:util.List[Clazz])
case class Clazz(@BeanProperty className:String)

打印結果

A
1001
1002
1003
{"clazzs":[{"className":"1001"},{"className":"1002"},{"className":"1003"}],"schoolName":"A"}

注意

1.從json文件讀取的的字符串是如果有List,需要用java的list接收,導入java.util

2.如果需要將java的List轉換成scala的List的需要導入scala.collection.JavaConversions._包,進行隱式轉換自動將java List轉為scala List。

3.JSON對象轉json的字符串需要JSON對象對應得實體類有get,set方法。通過@BeanProperty注解實現。

二.Json4s工具

scala自帶的Json解析工具,簡單使用

Json字符串<->對象

import org.json4s.jackson.{JsonMethods, Serialization}
/**
 * @description: 測試Json4S工具解析Json
 * @author: HaoWu
 * @create: 2020年09月11日
 */
object Json4STest {
  def main(args: Array[String]): Unit = {
    
    //數據格式:user:{"name": "zs","age": 10}
    val json = "{\"name\": \"zs\",\"age\": 10}"
    
    //導隱式函數
    implicit val f = org.json4s.DefaultFormats
    /** ************************* json字符串->對象 ***************************************/
    
    val user: User = JsonMethods.parse(json).extract[User]
    print(user)

    /** ************************* 對象->json字符串 ***************************************/
    val userJStr: String = Serialization.write(user)
    println(userJStr)
  }
}

case class User(name: String, age: Int)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM