การส่งข้อมูล binary ผ่าน JSON มักใช้ Base64 Encoding Java มี 2 วิธีหลัก: javax.xml.bind.DatatypeConverter (Java 6-8) และ java.util.Base64 (Java 8+ แนะนำ)
ตัวอย่าง JSON
{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}
}
วิธีที่ 1: java.util.Base64 (Java 8+ ✅ แนะนำ)
import java.util.Base64;
public class JsonBase64Example {
public static void main(String[] args) {
String json = "{\"menu\":{\"id\":\"file\",\"value\":\"File\"}}";
// Encode
String encoded = Base64.getEncoder().encodeToString(json.getBytes());
System.out.println("Encoded: " + encoded);
// eyJtZW51Ijp7ImlkIjoiZmlsZSIsInZhbHVlIjoiRmlsZSJ9fQ==
// Decode
byte[] decodedBytes = Base64.getDecoder().decode(encoded);
String decoded = new String(decodedBytes);
System.out.println("Decoded: " + decoded);
// {"menu":{"id":"file","value":"File"}}
}
}
Base64 Variants
// Standard (default)
Base64.getEncoder().encodeToString(bytes);
// URL Safe (ใช้ - และ _ แทน + และ /)
Base64.getUrlEncoder().encodeToString(bytes);
// MIME (มี line break ทุก 76 chars)
Base64.getMimeEncoder().encodeToString(bytes);
วิธีที่ 2: DatatypeConverter (Java 6-8, Deprecated Java 9+)
import javax.xml.bind.DatatypeConverter;
public class JsonBase64Legacy {
public static void main(String[] args) {
String json = "{\"menu\":{\"id\":\"file\"}}";
byte[] bytes = json.getBytes();
// Encode
String encoded = DatatypeConverter.printBase64Binary(bytes);
// Decode
byte[] decoded = DatatypeConverter.parseBase64Binary(encoded);
String result = new String(decoded);
}
}
⚠️ หมายเหตุ:
javax.xml.bindถูกนำออกจาก JDK 11+ ต้องเพิ่ม dependency แยกถ้าอยากใช้ต่อ
ตัวอย่างเต็ม รันได้ (Java 8+)
import java.util.Base64;
public class JsonEncodeDecode {
public static void main(String[] args) {
String json = "{\n" +
" \"menu\": {\n" +
" \"id\": \"file\",\n" +
" \"value\": \"File\",\n" +
" \"popup\": {\n" +
" \"menuitem\": [\n" +
" {\"value\": \"New\", \"onclick\": \"CreateNewDoc()\"},\n" +
" {\"value\": \"Open\", \"onclick\": \"OpenDoc()\"},\n" +
" {\"value\": \"Close\", \"onclick\": \"CloseDoc()\"}\n" +
" ]\n" +
" }\n" +
" }\n" +
"}";
// Encode
String encoded = Base64.getEncoder().encodeToString(json.getBytes());
System.out.println("=== Encoded ===");
System.out.println(encoded);
// Decode
byte[] decodedBytes = Base64.getDecoder().decode(encoded);
String decoded = new String(decodedBytes);
System.out.println("\n=== Decoded ===");
System.out.println(decoded);
}
}
กรณีใช้งานจริง
- ส่ง binary data (รูปภาพ, ไฟล์) ผ่าน REST API JSON
- เก็บข้อมูล binary ใน database text column
- JWT Token (Header.Payload.Signature เป็น Base64Url)
- Basic Authentication Header