文章目录


Json解析

【SparkSQL】扩展  ----  JSON解析_字符串


配置Maven依赖

<!--地理位置处理库 -->
<!-- https://mvnrepository.com/artifact/com.esri.geometry/esri-geometry-api -->
<dependency>
<groupId>com.esri.geometry</groupId>
<artifactId>esri-geometry-api</artifactId>
<version>2.2.2</version>
</dependency>
<!--json.json 解析库-->
<dependency>
<groupId>org.json4s</groupId>
<artifactId>json4s-native_2.11</artifactId>
<version>3.2.11</version>
</dependency>
<dependency>
<groupId>org.json4s</groupId>
<artifactId>json4s-jackson_2.11</artifactId>
<version>3.2.11</version>
</dependency>

案例

1.将有格式的字符串转为json对象

  • 导入工具包
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.json4s.jackson.Serialization.{read,write}
  • 定义一个有格式的字符串
val product =
"""
|{"name":"Tony","price":35.35}
|""".stripMargin
  • 解析字符串----通过该方法返回一个JValue类型的数据
// 解析字符串
// 通过该方法返回一个JValue类型的数据
val result = parse(product)
  • 查找对应信息
val name = result \"name"
println(name)
val price = result \"price"
println(price)
  • 将结果转为Product对象
// 方法一
// 定义隐式转换参数 --- 解析规则,提供格式化工具
implicit val formats = Serialization.formats(NoTypeHints)
val po1 = result.extract[Product]
println(po1)
// 方法二
// 通过read方法直接进行转换,但是使用该方法无法进行查询
val po2 = read[Product](product)
println(po2)

2.将有格式的字符串转为json对象

// 将对象转为字符串
val po3 = Product("电视",10.5)
// 注意:传入render的必须是一个JValue对象
//val jsonStr = compact(render(parse(product))
val jsonStr = write(po3)
println(jsonStr)