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)