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

วิธีแปลง Map เป็น JSON Object ด้วย JSON-lib API ใน Java

JSONObject เป็น unordered collection ของคู่ name/value pairs ในขณะที่ Map เป็น object ที่ map keys ไปยัง values Map ไม่สามารถมี duplicate keys ได้ และแต่ละ key map ไปยัง value ได้สูงสุดหนึ่งค่า เราต้องใช้ library JSON-lib สำหรับ serializing และ de-serializing Map ในรูปแบบ JSON เริ่มต้นด้วยการสร้าง POJO class และส่ง instance ไปให้เมธอด put() ของ Map class และสุดท้ายนำ map instance ไปให้เมธอด accumulateAll() ของ JSONObject

Syntax

public void accumulateAll(Map map)

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

import java.util.*;
import net.sf.json.JSONObject;

public class ConvertMapToJSONObjectTest {
    public static void main(String[] args) throws Exception {
        JSONObject jsonObject = new JSONObject();
        Map<Integer, Employee> employees = new HashMap<Integer, Employee>();
        
        employees.put(1, new Employee("Adithya", "Jai", 30));
        employees.put(2, new Employee("Vamsi", "Krishna", 28));
        employees.put(3, new Employee("Chaitanya", "Sai", 30));
        
        jsonObject.accumulateAll(employees);
        System.out.println(jsonObject.toString(3)); // pretty print JSON
    }
    
    public static class Employee {
        private String firstName, lastName;
        private int age;
        
        public Employee(String firstName, String lastName, int age) {
            this.firstName = firstName;
            this.lastName = lastName;
            this.age = age;
        }
        
        // getters...
        public String getFirstName() { return firstName; }
        public String getLastName() { return lastName; }
        public int getAge() { return age; }
    }
}

ผลลัพธ์ (Output)

{
  "1": {
    "firstName": "Adithya",
    "lastName": "Jai",
    "age": 30
  },
  "2": {
    "firstName": "Vamsi",
    "lastName": "Krishna",
    "age": 28
  },
  "3": {
    "firstName": "Chaitanya",
    "lastName": "Sai",
    "age": 30
  }
}

คำอธิบาย

เมธอด accumulateAll() นำ entries ทั้งหมดจาก Map เข้าไปใน JSONObject โดยใช้ key ของ Map เป็น JSON key และ value (Employee object) จะถูก serialize เป็น nested JSON object อัตโนมัติ

รูปแบบ Map อื่นๆ ที่รองรับ

  • Map<String, String> - key และ value เป็น string
  • Map<String, Object> - value เป็น object ใดๆ ที่ serializable
  • Map<Integer, List<String>> - value เป็น collection
  • Nested Maps - Map ที่ value เป็น Map อีกชั้น

เมธอดเกี่ยวข้องอื่นๆ

  • put(key, value) - เพิ่ม entry เดียว
  • accumulate(key, value) - เพิ่ม value เข้า array ที่ key นั้น (multi-value)
  • element(key, value) - alias ของ put()

สรุป

JSONObject.accumulateAll() ให้วิธีง่ายๆ ในการแปลง Map ทั้งหมดเป็น JSON object โดยอัตโนมัติ รองรับ nested objects และ collections ใน value ได้อย่างสมบูรณ์