Scala中,兩種生成json串方式的不同
阿新 • • 發佈:2018-12-25
在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)