大家好,這裡是懶得用字串串接的小編過路君子
本來是用字串慢慢串,後來想想,如果未來 Json 變龐大就會變得很麻煩
光是要將 String 型態的變數變成 Json,就要在開頭和結尾添加雙引號("),然後還要跳脫(\")。
如果數量小當然是無所謂,但是當數量一多、層次變複雜,便要人命了起來。
所以今天要來介紹一個可以快速產生 Json 格式的套件,這邊小編就先放出相關的 dependency 資訊:
<!-- https://mvnrepository.com/artifact/org.json/json --> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20230227</version> </dependency>
那小編最主要參考的範例來自官方所提供的範例程式碼,如果各位有興趣可以點擊左方的連結直接前往查看。
除了小編等等會介紹到的 Json 格式產生,裡面還有提到如何產生 xml、http header 或者是 Json 解析的用法,有需要的人直接飄過去~
產生 Json 格式
key 的資料型態沒得選,只能是 java.lang.String。
而 value 的值除了下方程式碼中看到的 String、int 或是 boolean 之外,Boxing 過的變數型態也支援,例如:Integer 或是 Boolean 之類的。
當然 float 和 double 也支援,直接塞在 key 後面就可以了。
import org.json.JSONObject; public class json { public static void main(String[] args) { JSONObject result = new JSONObject(); result.put("key", "value"); result.put("key2", 5); result.put("key3", true); System.out.println(result.toString()); } }
執行以上的程式,我們可以得到以下的結果:
{ "key2": 5, "key3": true, "key": "value" }
其中 key 顯示的順序沒法調整,也沒有必要調整。
添加陣列資料
我們也常常需要添加陣列進到我們的 Json 內,所以接下來我們來使用來自同一包內的 JSONArray 來添加陣列資料進到我們的 Json 內。
import org.json.JSONArray; import org.json.JSONObject; public class json { public static void main(String[] args) { JSONObject result = new JSONObject(); result.put("key", "value"); JSONArray array = new JSONArray(); array.put("sub"); array.put(100); array.put(false); result.put("key2", array); System.out.println(result.toString()); } }
執行以上的程式碼,我們可以得到以下的結果:
{ "key2": [ "sub", 100, false ], "key": "value" }
產生多層次的Json
那如果我們要在陣列裡面再放入物件那也非常簡單,直接將 JSONObject 塞入 JSONArray 就對了。
import org.json.JSONArray; import org.json.JSONObject; public class json { public static void main(String[] args) { JSONObject result = new JSONObject(); result.put("key", "value"); JSONObject sub1 = new JSONObject(); sub1.put("name", "Bob"); sub1.put("age", 18); JSONObject sub2 = new JSONObject(); sub2.put("name", "Alex"); sub2.put("age", 27); JSONArray array = new JSONArray(); array.put(sub1); array.put(sub2); result.put("key2", array); System.out.println(result.toString()); } }
這樣我們就可以得到以下的 Json:
{ "key2": [ { "name": "Bob", "age": 18 }, { "name": "Alex", "age": 27 } ], "key": "value" }
可以發現我們的 key2 所對應的就是一個陣列了。
那如果要讓 key2 所對應的變成物件,那也很簡單,不用先塞進 JSONArray 內,直接塞進 JSONObject 就對了。
後記
因為小編只需要產生 Json,不需要去解析任何的 Json,所以這個套件對於小編來說非常方便。
至少比起用字串在那邊串接到快眼花還要好,當然,這個套件當然也有解析 Json 的功能,有興趣的可以前往官方的範例程式碼查看。
順帶一提,小編是拿來作為 rest server 的一部分,不得不說,Firefox 對於 Json 格式的渲染真的很好看,還要特別去更改 header,要不然瀏覽器認不得這個 Json,使用上沒有差別,但是就是用起來比較高興。