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