1. 程式人生 > >Scala中,兩種生成json串方式的不同

Scala中,兩種生成json串方式的不同

在scala開發的工程中,可能需要用到json的相關知識。通常情況下,我們會用到JSON.toJSONString(...)和jsonObject.toJSONString(...)兩種方法。使用這兩種方法,需要新增阿里巴巴的fastjson的依賴

<!-- fastjson -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.8</version>
</dependency>

接下來,我們將通過例項看一下這兩種方法所生成的json串有什麼不同。

 

方法一:JSON.toJSONString(...)

def jsontest(): Unit ={
	var list:util.List[Any] = new util.ArrayList[Any]()
	var map1 = new util.HashMap[String,Any]()
	map1.put("name","Johnson")
	map1.put("age",18)
	map1.put("hobby","basketball")
	var map2 = new util.HashMap[String,Any]()
	map2.put("name","Jack")
	map2.put("age",20)
	map2.put("hobby","football")
	var map3 = new util.HashMap[String,Any]()
	map3.put("name","Johnson")
	map3.put("age",22)
	map3.put("hobby","swimming")
	list.add(map1)
	list.add(map2)
	list.add(map3)
	val jsonString = JSON.toJSONString(list, SerializerFeature.BeanToArray)
	println(jsonString)
}

執行結果:

[{"name":"Johnson","age":18,"hobby":"basketball"},{"name":"Jack","age":20,"hobby":"football"},{"name":"Johnson","age":22,"hobby":"swimming"}]

 

方法二:jsonObject.toJSONString(...)

def jsontest(): Unit ={
    var list:util.List[Any] = new util.ArrayList[Any]()
    var map1 = new util.HashMap[String,Any]()
    map1.put("name","Johnson")
    map1.put("age",18)
    map1.put("hobby","basketball")
    var map2 = new util.HashMap[String,Any]()
    map2.put("name","Jack")
    map2.put("age",20)
    map2.put("hobby","football")
    var map3 = new util.HashMap[String,Any]()
    map3.put("name","Johnson")
    map3.put("age",22)
    map3.put("hobby","swimming")
    list.add(map1)
    list.add(map2)
    list.add(map3)
    val jsonObject = new JSONObject()
    jsonObject.put("list",list)
    val jsonString = jsonObject.toJSONString
    println(jsonString)
}

執行結果:

{"list":[{"name":"Johnson","age":18,"hobby":"basketball"},{"name":"Jack","age":20,"hobby":"football"},{"name":"Johnson","age":22,"hobby":"swimming"}]}

 

從上面測試的結果,可以看出,方法二比方法一生成的json串多了一層“list”。

在方法一中,json串中是3個map物件;在方法二中,,json串中是一個list,list中包含了3個map物件。

 

注意:在使用方法一JSON.toJSONString()方法時,不能直接使用JSON.toJSONString(object),執行時會報方法過載的錯誤,toJSONString(x$1: Any)和toJSONString(x$1: Any, x$2: com.alibaba.fastjson.serializer.SerializerFeature*)同時匹配了方法的引用,導致報錯。為了避免呼叫時存在方法過載的錯誤,在呼叫方法時,呼叫JSON.toJSONString(x$1: Any, x$2: com.alibaba.fastjson.serializer.SerializerFeature*),如上面方法一中的JSON.toJSONString(list, SerializerFeature.BeanToArray)