Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีแปลง Java Array หรือ ArrayList เป็น JsonArray ด้วย Gson ใน Java

Java Arrays เป็น object ที่จัดเก็บ หลายตัวแปรชนิดเดียวกัน (same type) รองรับ primitives และ object references ArrayList แทน resizable list ของ objects สามารถ add, remove, find, sort, replace elements ได้ JsonArray parse text จาก string เพื่อสร้าง vector-like object เราสามารถแปลง array หรือ ArrayList เป็น JsonArray ด้วยเมธอด toJsonTree().getAsJsonArray() ของคลาส Gson

Syntax

public JsonElement toJsonTree(java.lang.Object src)

ตัวอย่างการใช้งาน

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<ArrayList<String>> arrayList = new ArrayList<>();
        for (int i = 0; i < strArray.length; i++) {
            ArrayList<String> nextElement = new ArrayList<>();
            for (int j = 0; j < strArray[i].length; j++) {
                nextElement.add(strArray[i][j] + "-B");
            }
            arrayList.add(nextElement);
        }
        
        JsonObject jsonObj = new JsonObject();
        
        // Array to JsonArray
        JsonArray jsonArray1 = new Gson().toJsonTree(strArray).getAsJsonArray();
        
        // ArrayList to 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"]]}

คำอธิบาย

  1. new Gson().toJsonTree(strArray) แปลง Java object (array) เป็น JsonElement tree
  2. .getAsJsonArray() cast JsonElement เป็น JsonArray (โยน exception ถ้าไม่ใช่ array)
  3. ทำงานได้กับ arrays ทุกชนิด: primitive arrays, object arrays, multi-dimensional arrays
  4. ทำงานได้กับ Collections ทุกชนิดที่ implement Collection interface

รูปแบบอื่นที่ใช้ได้

// 1. ใช้ toJson() โดยตรง (ได้ JSON string)
String json = new Gson().toJson(strArray);

// 2. ใช้ TypeToken สำหรับ generic collections
Type listType = new TypeToken<ArrayList<String>>(){}.getType();
JsonArray jsonArray = new Gson().toJsonTree(stringList, listType).getAsJsonArray();

// 3. Streaming API (JsonWriter) สำหรับ memory efficiency

สรุป

Gson ให้การแปลง Java arrays และ Collections เป็น JsonArray ได้อย่างง่ายดายด้วย toJsonTree().getAsJsonArray() รองรับ nested structures และ generic types อย่างสมบูรณ์