package org.onepiece.bigdata.windows
import net.minidev.json.JSONObject
import net.minidev.json.parser.JSONParser
//import java.util
//import scala.collection.JavaConversions._
//import scala.collection.mutable
//import scala.util.parsing.json.JSON
/*
* Scala解析Json字符串
* */
object ScalaReadJson {
def main(args: Array[String]): Unit = {
json_test_Single()
}
def json_test_Single() = {
// {"name":"phone info","mobile":"iphone","os":"iOS","version":"12","date":"2021-04-15","time":"20:30:12"}
val jsonStr =
"""
|{
| "name": "phone info",
| "mobile": "iphone",
| "os": "iOS",
| "version": "12",
| "date": "2021-04-15",
| "time": "20:30:12"
|}
""".stripMargin
println(jsonStr)
println("---------------------------")
val jsonParser = new JSONParser()
val jsonObj: JSONObject = jsonParser.parse(jsonStr).asInstanceOf[JSONObject]
//string
val name = jsonObj.getAsString("name")
println(name)
//long
val version = jsonObj.getAsNumber("version")
println(s"${version} -- ${version.getClass.getName}")
println("---------------------------")
val jsonKeys = jsonObj.keySet()
val hasNameKey: Boolean = jsonKeys.contains("name")
println("是否存在 name key字段: " + hasNameKey)
val hasIdKey: Boolean = jsonKeys.contains("id")
println("是否存在 id key字段: " + hasIdKey)
println("---------------------------")
jsonKeys.forEach(x => {
val key = x
val value = jsonObj.get(key).toString
println(s"key:【${key}】, value: 【${value}】")
})
}/* 依赖组件
<dependency>
<groupId>net.minidev</groupId>
<artifactId>json-smart</artifactId>
<version>2.3</version>
</dependency>
**/
}
{
"name": "phone info",
"mobile": "iphone",
"os": "iOS",
"version": "12",
"date": "2021-04-15",
"time": "20:30:12"
}
---------------------------
phone info
12 -- java.lang.Long
---------------------------
是否存在 name key字段: true
是否存在 id key字段: false
---------------------------
key:【date】, value: 【2021-04-15】
key:【os】, value: 【iOS】
key:【name】, value: 【phone info】
key:【mobile】, value: 【iphone】
key:【time】, value: 【20:30:12】
key:【version】, value: 【12】
package org.onepiece.bigdata.windows
import net.minidev.json.JSONObject
import net.minidev.json.parser.JSONParser
//import java.util
//import scala.collection.JavaConversions._
//import scala.collection.mutable
//import scala.util.parsing.json.JSON
/*
* Scala解析Json字符串
* */
object ScalaReadJson {
def main(args: Array[String]): Unit = {
json_test_Multiple()
}
def json_test_Multiple() = {
// {"name":"phone info","before":{"mobile":"iphone","os":"iOS"},"after":{"mobile":"xiaomi","version":"11"},"date":"2021-04-15","time":"20:30:12"}
val jsonStr =
"""
|{
| "name": "phone info",
| "before": {
| "mobile": "iphone",
| "os": "iOS"
| },
| "after": {
| "mobile": "xiaomi",
| "version": "11"
| },
| "date": "2021-04-15",
| "time": "20:30:12"
|}
""".stripMargin
println(jsonStr)
println("---------------------------")
val jsonParser = new JSONParser()
val jsonObj: JSONObject = jsonParser.parse(jsonStr).asInstanceOf[JSONObject]
val name = jsonObj.get("name").toString
println(name)
println("---------------------------")
// before json
val json_before = jsonObj.getAsString("before")
println(json_before)
val json_after = jsonObj.getAsString("after")
println(json_after)
println("---------------------------")
val obj_before: JSONObject = jsonParser.parse(json_before).asInstanceOf[JSONObject]
val obj_after: JSONObject = jsonParser.parse(json_after).asInstanceOf[JSONObject]
val map_before = obj_before.keySet()
val map_after = obj_after.keySet()
var mobile = ""
if (map_after.contains("mobile") || map_before.contains("mobile")) {
mobile =
if (map_after.contains("mobile")) obj_after.getAsString("mobile")
else obj_before.getAsString("mobile")
}
println(mobile)
println("---------------------------")
var os = ""
if (map_after.contains("os") || map_before.contains("os")) {
os =
if (map_after.contains("os")) obj_after.getAsString("os")
else obj_before.getAsString("os")
}
println(os)
println("---------------------------")
var version = ""
if (map_after.contains("version") || map_before.contains("version")) {
version =
if (map_after.contains("version")) obj_after.getAsString("version")
else obj_before.getAsString("version")
}
println(version)
println("---------------------------")
var other = "default"
if (map_after.contains("other") || map_before.contains("other")) {
other =
if (map_after.contains("other")) obj_after.getAsString("other")
else obj_before.getAsString("other")
}
println(other)
}
/* 依赖组件
<dependency>
<groupId>net.minidev</groupId>
<artifactId>json-smart</artifactId>
<version>2.3</version>
</dependency>
**/
}
{
"name": "phone info",
"before": {
"mobile": "iphone",
"os": "iOS"
},
"after": {
"mobile": "xiaomi",
"version": "11"
},
"date": "2021-04-15",
"time": "20:30:12"
}
---------------------------
phone info
---------------------------
{"os":"iOS","mobile":"iphone"}
{"mobile":"xiaomi","version":"11"}
---------------------------
xiaomi
---------------------------
iOS
---------------------------
11
---------------------------
default