Scala 解析 Json字符串


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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM