挺費勁的,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
}
}