scala中的json封裝

挺費勁的,java和scala的返回方式爲了統一,需要封裝scala的返回方式 ,需要一個listmap,但是如果是java可以直接將listMap放入json中就可以了,但是scala不行,我們也不能將對象直接裝成jsonstring,這樣的話,我們在放入json後,會自動加上轉義字符,可以使用listbuffer 然後轉array

package flinkonkafka


import net.minidev.json.JSONObject
import net.minidev.json.parser.JSONParser
import com.alibaba.fastjson.JSON
import com.alibaba.fastjson.serializer.SerializerFeature

import scala.beans.BeanProperty
import scala.collection.mutable
import scala.collection.mutable.{ArrayBuffer, ListBuffer}
import scala.collection.JavaConversions.bufferAsJavaList
/***
 * @Author BaronND
 * @Description 從kafka上獲取的json解析
 * @Date  2020/6/11
 * @Param
 * @return
 **/
class RequestJson{}
case class result(@BeanProperty code:String,@BeanProperty value:String)
object RequestJson{

  def main(args: Array[String]): Unit = {
    var resultMap = Map("CF402" -> "-0.037855187404791296", "CF327" -> "0.06558579235761422", "CF401" -> "-0.030836201749878455", "CF33" -> "-0.008973041330299265")
    var a=getArrayObj(resultMap)
    var b=getArrayObjs(resultMap)
    println(a)
    println(b)
  }


  //計算參數
  def getStringJson(s: String): mutable.Map[String, Object] = {
    val jsonobj = JSON.parseObject(s)
    val jsonParm = jsonobj.getJSONObject("parameter")
    var parameter=jsonToMap(jsonParm.toString)//請求參數封裝
    JSON.toJSONString(parameter, SerializerFeature.WriteMapNullValue)

    parameter
  }


  //返回原來的json
  def callBackJson(requestJSON:String,handleTs:Long,map:Map[String,String],message:String) ={
    import com.alibaba.fastjson.JSONObject
    val js = JSON.parseObject(requestJSON)
    val jsonObj :JSONObject= new JSONObject()
    var rs=mutable.Map[String, Object]()

    var data=getArrayObj(map)
    val jsonResult = js.getJSONObject("result")
    jsonResult.put("data",data)
    jsonResult.put("message",message)
    js.put("result", jsonResult)
    js.put("handleTs",handleTs)
    js

  }

  //獲取計算參數
  def getCallBackUrl(s: String):String = {
    import com.alibaba.fastjson.JSON
    val jsonobj = JSON.parseObject(s)
    val jsonParm = jsonobj.getString("callbackUrl")
    jsonParm
  }

  //對應的json轉map
  def jsonToMap(svdInfo: String) = {
    val parserJson = new JSONParser()
    val jsonObj: JSONObject = parserJson.parse(svdInfo).asInstanceOf[JSONObject]
    val jsonKey = jsonObj.keySet()
    val iter = jsonKey.iterator()
    val map: mutable.HashMap[String, Object] = new mutable.HashMap[String, Object]()

    while (iter.hasNext) {
      val instance = iter.next()
      val value = jsonObj.get(instance).toString
      map.put(instance, value)
    }
    map
  }



  //將獲取的map對象封裝成對應的array[result] 結果:[Lflinkonkafka.result;@bd8db5a
  def getArrayObj(map:Map[String,String])={
    var ll=new ListBuffer[result]
//    val array = ArrayBuffer[result]()
    map.map(m => {
      var r= new result(m._1,m._2)
//      array.add(r)
      ll.add(r)
    })
    ll.toArray
  }

  //將獲取的map對象封裝成對應的array[result]:結果:ArrayBuffer(result(CF402,-0.037855187404791296), result(CF327,0.06558579235761422))
  def getArrayObjs(map:Map[String,String])={
        val array = ArrayBuffer[result]()
    map.map(m => {
      var r= new result(m._1,m._2)
            array.add(r)
    })
    array
  }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章