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
Gsoninstance 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.