[精讚] [會員登入]
735

【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

你可能感興趣的文章

【C++】一些好用的C++小功能 —— 壹 不太重要,但是可以增加程式質量以及可以讓程式看起來好像很厲害

【Wicket】[Header]如何讀取來自客戶端地檔頭和傳送自訂擋頭至客戶端 當需要設定檔頭或是讀取來自客戶端的檔頭時,這些程式碼就很好用

【C】〔無條件捨去〕如何忽略float數據 直接儲存成int型態(數據100%不失真) a148: You Cannot Pass?! 解題時所意外研究出來的神奇寫法,懂了原理之後要自行改寫成四捨五入或無條件進位應該就簡單了吧!

【Wickct】如何製作一個簡單的動態響應頁面和傳遞參數至其他頁面 身為一個後端架構程式,這個功能當然是非常重要之一

【Wickct】(link) <a> 如何新增超連結 簡單來說有兩種方式,小編個人比較偏好 的方法

【Discord bot】[botton]按鈕的使用、響應和關閉 Discord的botton通常都要和View配合使用。

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

高捷少女:小穹與果仁巧克力㊤ 阿敏突然輕笑一聲,從櫃臺拿來一個塑膠餐盒,打開給大家看。「這是小穹烤的餅乾,妳們吃吃看就知道她為什麼不想講了。」小穹變得緊張起來。「阿敏,妳怎麼還留著呀?」艾米莉亞、婕兒與耐耐各自拿了一塊,把夾著奶油

高捷少女:購票大作戰① 「各位乘客,本班機即將降落,感謝各位乘客的搭乘……」隨著空中小姐的廣播音,那架飛機逐漸降落在地面,裡面的乘客們也紛紛開始整理自己的行李。 那個有著歐美人五官的少女抓緊包包,看著外面的小港機場,臉上緩緩

高捷少女:美麗島的守護者① 婕兒跟耐耐嚇得臉色發白。「耐耐,小穹有這方面的愛好喔?」婕兒小聲地說。耐耐默默的拿出筆記本,臉上浮現一層微笑:「這麼大的新聞,要趕快記下來!」

高捷少女:美麗島的守護者④ 光之穹頂的某處垃圾桶底,一個四方形的機器持續發出聲音,機器的儀表板上顯示著「1:25:10」的字樣,外表被一層鞭炮所掩蓋。儀表板的數字每秒不斷減少,細微的嗶嗶聲也隨著數字的改變發出,但在熙來攘往的美麗

高捷少女:耐耐的新年驚喜(終) 他的話說到一半,便被一陣響亮的哭聲打住了,是從產房中的傳來的。聽起來就像嬰兒的哭聲。 婕兒、小穹跟艾米也被哭聲吵醒,婕兒揉揉眼睛,看向呆若木雞的耐耐父女。「剛剛的聲音,該不會是……」