Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Chuyển Java Array/ArrayList thành JsonArray dùng Gson (Java)

Gson chuyển array/ArrayList → JsonArray qua toJsonTree().getAsJsonArray().

Cú pháp

public JsonElement toJsonTree(Object src)

Ví dụ: 2D Array và Nested ArrayList

import com.google.gson.*;
import java.util.*;

public class JavaArrayToJsonArrayTest {
    public static void main(String[] args) {
        String[][] strArray = {{"elem1-1", "elem1-2"}, {"elem2-1", "elem2-2"}};
        
        // ArrayList lồng nhau
        List<List<String>> arrayList = new ArrayList<>();
        for (String[] row : strArray) {
            List<String> inner = new ArrayList<>();
            for (String s : row) inner.add(s + "-B");
            arrayList.add(inner);
        }
        
        JsonObject jsonObj = new JsonObject();
        
        // Array → JsonArray
        JsonArray jsonArray1 = new Gson().toJsonTree(strArray).getAsJsonArray();
        
        // ArrayList → JsonArray
        JsonArray jsonArray2 = new Gson().toJsonTree(arrayList).getAsJsonArray();
        
        jsonObj.add("jsonArray1", jsonArray1);
        jsonObj.add("jsonArray2", jsonArray2);
        
        System.out.println(jsonObj.toString());
    }
}

Output

{
  "jsonArray1": [["elem1-1","elem1-2"],["elem2-1","elem2-2"]],
  "jsonArray2": [["elem1-1-B","elem1-2-B"],["elem2-1-B","elem2-2-B"]]
}

Các cách khác với Gson

  • Serialize trực tiếp thành String: gson.toJson(array) → JSON string.
  • Primitive array: int[] arr = {1,2,3}; gson.toJson(arr) → [1,2,3] (Gson hỗ trợ primitive array tự động).
  • TypeToken cho generic: Deserialize JSON → List<T> cần TypeToken.

So sánh Gson vs Jackson cho Array/Collection

Đặc điểm Gson Jackson
Primitive array Hỗ trợ tự động Hỗ trợ tự động
Generic Collection deserialize Cần TypeToken Cần TypeReference
Streaming API JsonReader/JsonWriter JsonParser/JsonGenerator (mạnh hơn)
Tree Model JsonElement/JsonObject/JsonArray JsonNode/ObjectNode/ArrayNode

Best Practice

  • Dùng Gson instance singleton (thread-safe) thay vì new Gson() mỗi lần.
  • Cấu hình: new GsonBuilder().setPrettyPrinting().serializeNulls().create().
  • Cho performance critical: Jackson streaming API nhanh hơn Gson streaming.