JSON-lib เป็น Java library สำหรับ serialize และ deserialize Java beans, maps, arrays, และ collections ในรูปแบบ JSON เราสามารถแปลง bean เป็น XML โดยไม่มี type hints โดยใช้เมธอด setTypeHintsEnabled() ของคลาส XMLSerializer เมธอดนี้ตั้งค่าว่าจะรวม JSON types เป็น attributes หรือไม่ ส่ง false เพื่อปิด type hints ใน XML
Syntax
public void setTypeHintsEnabled(boolean typeHintsEnabled)
ตัวอย่างการใช้งาน
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;
public class ConvertBeanToXMLNoHintsTest {
public static void main(String[] args) {
Employee emp = new Employee("Krishna Vamsi", 115, 30, "Java");
JSONObject jsonObj = JSONObject.fromObject(emp);
System.out.println(jsonObj.toString(3)); // pretty print JSON
XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.setTypeHintsEnabled(false); // ปิด type hints
String xml = xmlSerializer.write(jsonObj);
System.out.println(xml);
}
public static class Employee {
private String empName, empSkill;
private int empId, age;
public Employee(String empName, int empId, int age, String empSkill) {
this.empName = empName;
this.empId = empId;
this.age = age;
this.empSkill = empSkill;
}
// getters...
public String getEmployeeName() { return empName; }
public int getEmployeeId() { return empId; }
public String getEmployeeSkill() { return empSkill; }
public int getAge() { return age; }
}
}
ผลลัพธ์ (Output)
{
"employeeName": "Krishna Vamsi",
"employeeSkill": "Java",
"employeeId": 115,
"age": 30
}
30
115
Krishna Vamsi
Java
คำอธิบาย
เมื่อ setTypeHintsEnabled(false) XML output จะไม่มี attribute type="string" หรือ type="number" ทำให้ XML สะอาด อ่านง่าย และขนาดเล็กลง
เปรียบเทียบ: มี vs ไม่มี Type Hints
มี Type Hints (default):
30
Krishna Vamsi
ไม่มี Type Hints:
30
Krishna Vamsi
กรณีการใช้งาน (Use Cases)
- เมื่อ XML จะถูก consume โดยระบบที่ไม่รองรับ type hints
- เมื่อต้องการ XML ขนาดเล็ก (bandwidth saving)
- เมื่อต้องการ XML ที่อ่านง่ายสำหรับ human
- การแปลง JSON → XML สำหรับ legacy systems
สรุป
XMLSerializer ของ JSON-lib ให้การแปลง JSON เป็น XML ได้อย่างง่ายดาย การปิด type hints ด้วย setTypeHintsEnabled(false) ทำให้ XML output สะอาดและเข้ากันได้กับระบบที่ไม่คาดหวัง type attributes