Simplified Old Java Objects (SOJO)

เรื่องของเรื่อง หลายวันมานี้เจอโจทย์ที่ต้องใช้  JSON format บน IBM Web Sphere Portal 6.0 ที่ใช้ JRE  ของ IBM ที่เป็น  Version 1.4.2

เท่าที่ดูก็ไม่น่าจะยุ่งยากอะไร Server Side  ที่เป็น Java  น่าจะใช้ JSON-Lib ตามพิมพ์นิยม

ตอนทำ POC ด้วย Java App ธรรมดารันใน Rational Software Architect (RSA) ชื่อเดิม WebSphere Studio Application Developer (WSAD) ก็ทำงานบน JRE ตัวที่ว่าได้ดีไม่มีปัญหาแต่อย่างใด

แต่เอาเข้าจริงกลับไม่เป็นแบบนั้น พอย้ายไปรันบน  App Server  ที่เป็น Web Sphere Portal 6.0 ที่บอกข้างต้น ใช้ Code  เดียวกัน กลับ Throw Exception ทำนองหา Class ไม่เจอบ้าง หา Method ไม่เจอบ้าง (มันมีหลาย Exception เพราะตอนหลังผมต้องนั่งไล่ถอด Lib เข้าออกทีละตัว เพราะ JSON-Lib ใช้ พวก Apache Common หลายตัว)

ลองไล่จนเหนื่อย จนคิดว่าเสียเวลามากๆ เอาเวลาไปคิดงานอื่นดีกว่า เลยตัดสินใจเปลี่ยน Lib (คิดหนักยังกับคนเล่นกล้องย้ายค่าย ฮา…)

ไปลองนั่งไล่ในเว็บ JSON.org ว่ามี  Lib ตัวไหนน่าสนใจบ้าง

  • org.json กับ org.json.simple ของ JSON.org เองก็ Simple แต่ยังตอบโจทย์ในเรื่องความสะดวกไม่ได้ คือต้องการประมาณโยน Object แล้วให้ Lib แปลงเป็น JSON  Message ให้เลย
  • JsonMarshaller ฟีเจอร์ดูๆน่าจะตามที่ต้องการ แต่โปรเจคเงียบเหงามาก เข้าไปหาเอกสารเจออยู่นิดหน่อย เลยถอย…
  • google-gson ฟีเจอร์ดี เอกสารครบ โปรเจคมีการเคลื่อนไหว แต่… require JRE 5.0 อดเลย
  • SOJO เท่าที่ลอง เขียนง่ายพอๆกับ JSON-Lib  เรื่อง Performance  ต่างกันบ้าง แต่ไม่ถึงกับรู้สึกได้ และ Object ที่จะใช้ก็ไม่ได้ใหญ่ถึงนาดต้องกังวลมากนัก มี Dependency น้อยกว่่า JSON-Lib มาก และที่สำคัญทำงานกับ IBM JRE 1.4.2  และ IBM Web Sphere Portal 6.0 ได้อย่างไม่มีปัญหา

SOJO มี  Feature ในการแปลง Java Object ไปมาระหว่าง Format ต่อไปนี้

  • JSON
  • XML-RPC
  • Java-Object serialization (without implements the interface java.io.Serializable)
  • CSV (Comma Separated Value)

ลองดูตัวอย่าง Code ในการแปลง Java Object ไปเป็น JSON

Serializer serializer = new JsonSerializer();
String str = “My Test String”;
Object result = serializer.serialize(str);
System.out.println(result);
// print: “My Test String”

Object o[] = new Object[] { “text”, new Long(1234), Boolean.TRUE };
result = serializer.serialize(o);
System.out.println(result);
// print: [“text”,1234,true]

Car car = new Car();
car.setName(“MyCar”);
car.setDescription(“This is really my car.”);
Object result = serializer.serialize(car);
// print: {“description”:”This is really my car.”,”name”:”MyCar”,”class”:”test.net.sf.sojo.model.Car”}

สุดท้าย ต้องบอกต่อว่า SOJO ของเขาดีจริงๆ ทดแทน JSON Lib ได้อย่างสมบูรณ์ในส่วนของการแปลง Object ไปเป็น JSON

ส่วน Lib ตัวอื่นๆที่ JSON.org นั้น ผมยังไม่มีเวลาศึกษาต่อ เพราะเห็นว่า SOJO ก็ทำงานตามที่ต้องการได้ดีอยู่แล้ว เอาเวลาไปทำงานส่วนอื่นก่อนดีกว่า 😀

One thought on “Simplified Old Java Objects (SOJO)

Leave a Reply

Your email address will not be published. Required fields are marked *