首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 生成 JSON 字串三大主流庫實戰指南

     編輯:Java 相關知識

前言

JSON 已成為現代應用數據交換的事實標準。Java 生態系提供多種成熟庫處理 JSON 序列化與反序列化,本文針對 org.json、json-lib (net.sf.json)、Jackson/Gson(補充) 三大主流方案進行實戰演示,幫助開發者快速選型並避坑。

方案一:org.json(輕量級官方實現)

特點:零依賴、API 簡潔、適合簡單場景,但功能較弱(不支援泛型反序列化、日期格式化等)。

Map/List/陣列構建 JSONObject

public class OrgJsonDemo {
    public static void main(String[] args) throws JSONException {
        JSONObject json = new JSONObject("{\"name\":\"reiz\"}");
        json.put("initial", json.getString("name").substring(0, 1).toUpperCase());
        
        String[] likes = {"JavaScript", "Skiing", "Apple Pie"};
        json.put("likes", likes);
        
        Map<String, String> ingredients = new HashMap<>();
        ingredients.put("apples", "3kg");
        ingredients.put("sugar", "1kg");
        json.put("ingredients", ingredients);
        
        System.out.println(json.toString(2)); // 格式化輸出
    }
}

輸出:

{
  "name": "reiz",
  "initial": "R",
  "likes": ["JavaScript", "Skiing", "Apple Pie"],
  "ingredients": {"apples": "3kg", "sugar": "1kg"}
}

方案二:json-lib(經典老牌,支援 Bean/Collection 雙向轉換)

依賴:json-lib、ezmorph、commons-lang、commons-beanutils、commons-collections、commons-logging。適合舊專案維護,新專案建議改用 Jackson/Gson。

List/陣列/字串轉 JSONArray

public class JsonLibListDemo {
    public static void main(String[] args) {
        // 1. 基本型別陣列
        boolean[] boolArr = {true, false, true};
        System.out.println(JSONArray.fromObject(boolArr)); // [true,false,true]
        
        // 2. List 集合
        List<String> list = Arrays.asList("first", "second");
        System.out.println(JSONArray.fromObject(list)); // ["first","second"]
        
        // 3. JSON 字串
        System.out.println(JSONArray.fromObject("['json','is','easy']")); // ["json","is","easy"]
    }
}

JSON 反序列化為 List/Map

public class JsonLibParseDemo {
    public static void main(String[] args) {
        // List
        String listStr = "[\"apple\",\"orange\"]";
        Collection<String> fruits = JSONArray.toCollection(
            JSONArray.fromObject(listStr), String.class);
        fruits.forEach(System.out::println);
        
        // Map (含巢狀結構)
        String mapStr = "{\"age\":30,\"name\":\"Michael\",\"baby\":[\"Lucy\",\"Lily\"]}";
        Map<String, Object> map = (Map) JSONObject.toBean(
            JSONObject.fromObject(mapStr), Map.class);
        map.forEach((k, v) -> System.out.println(k + " = " + v));
    }
}

方案三:現代化選擇——Jackson / Gson(強烈推薦新專案)

特性JacksonGson
效能極高(流式 API)高
泛型支援完善需 TypeToken
日期/枚舉/Null 處理豐富註解靈活配置
Spring Boot 整合預設內建需額外引入

Jackson 快速上手

ObjectMapper mapper = new ObjectMapper();
// 序列化
String json = mapper.writeValueAsString(userList);
// 反序列化
List<User> users = mapper.readValue(json, new TypeReference<List<User>>(){});

Gson 快速上手

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
// 序列化
String json = gson.toJson(userList);
// 反序列化
Type type = new TypeToken<List<User>>(){}.getType();
List<User> users = gson.fromJson(json, type);

選型建議總結

  • 簡單臨時需求/零依賴:org.json
  • 舊專案維護:json-lib
  • 新專案/高效能/複雜物件圖:Jackson(Spring Boot 首選)或 Gson
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved