[精讚] [會員登入]
1999

【JSON In Java】如何快速產生JSON

身為三十年老程式語言,當然對Json有不錯的支援,那究竟該如何使用呢

分享此文連結 //n.sfs.tw/16158

分享連結 【JSON In Java】如何快速產生JSON@小編過路君子
(文章歡迎轉載,務必尊重版權註明連結來源)
2023-04-12 00:33:33 最後編修
2023-04-11 23:38:03 By 過路君子
 

大家好,這裡是懶得用字串串接的小編過路君子

本來是用字串慢慢串,後來想想,如果未來 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,使用上沒有差別,但是就是用起來比較高興。

END

你可能感興趣的文章

【Maven】如何創建一個簡單可執行的JAR檔 滿重要的一個小功能,畢竟有時候是要傳遞的是JAR檔,而不是直接透過Maven直接部屬之類的

【Docker&Wildfly】(bitnami/wildfly)如何從零開始創建網頁伺服器 使用他人的 docker image 來架設我們的 wildfly web server

【Arduino/LinkIt 7697】實作小小的 MQTT Publish & Subscribe 若是要多點對多點傳輸資料,那使用 MQTT 即可快速的達成我們所需的目的

【Vim】解決貼上文字時出現過多空格的問題 換了新系統,有時候就算重裝軟體並且複製了設定檔也還是會出現非常奇怪的現象

【C++】使用struct array和一維int array模擬二維int array 主要是因為用sort去排序int array的二維陣列小編懶得研究,於是就研究了一種維持一維陣列但是有二維陣列效果的程式,小編就廢~~

【Maven / Jython】建立可直接執行的JAR檔案 以小編的前一篇文章為基礎,加了一些新東西進去,就變成另一個樣貌了

隨機好文

【開箱】高捷少女collection總集篇1 由希萌創意寄來的大包裹!裡面究竟有什麼呢?小編就帶大家來看看!

希萌創意預計在今年7月繼東津萌米之後再次推出新遊戲--食用性少女! 今天來介紹希萌創意的心企劃案,來讓大家知道這個消息!讓大家的錢包君一起來減肥吧!Ψ(☆w☆)

高捷少女:地下城的探險少女③ 過了十分鐘後,前方的天花板滴下一滴水珠,發出「噠」一聲響亮地落在石地上,讓大家嚇一跳。     「什麼嘛,只是水珠而已。」艾米撫著胸口噓了一聲。     忽然間,耐耐的臉色發白起來。「各位,你們看

高捷少女:地下城的探險少女(終)  小穹眨眨眼睛,然後說了出來。「其實,從剛剛開始,我就在想了……是在看過這本日記之後。」她拿出日記。「我想……我們尋找寶藏的想法,是不是真的正確的?」「怎麼說呢?」耐耐好奇地問。「這個埋藏寶藏的人,在

高捷少女:購票大作戰② 一個不好的預感浮現,艾米莉亞開始檢查屋子四處。窗戶跟陽台都有關好,也沒有被打開的跡象。但一股無形的壓力,開始在寂靜的公寓中蔓延,她不安地嚥一下喉嚨。最後,她走向那扇窗戶,那前天晚上,白龍為了逃脫,而撞