JSON (JavaScript Object Notation) เป็นรูปแบบการแลกเปลี่ยนข้อมูลแบบข้อความที่อ้างอิงจากไวยากรณ์ออบเจ็กต์ของ JavaScript ถูกใช้ในทุกที่: ตั้งแต่ REST API และไฟล์การกำหนดค่าไปจนถึงการจัดเก็บข้อมูลในฐานข้อมูลและแอปพลิเคชันมือถือ ตามเว็บไซต์ทางการของ JSON รูปแบบนี้ไม่ขึ้นอยู่กับภาษาโปรแกรมและรองรับโดยแทบทุกแพลตฟอร์มสมัยใหม่ JSON ได้กลายเป็นมาตรฐานโดยพฤตินัยสำหรับการถ่ายโอนข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์
ประเด็นสำคัญ
JSON เป็นรูปแบบข้อความสำหรับแสดงข้อมูลที่มีโครงสร้าง อ้างอิงจากไวยากรณ์ของ JavaScript แม้จะมีต้นกำเนิดจาก JavaScript แต่รูปแบบนี้ไม่ขึ้นกับภาษาโดยสมบูรณ์ — ตัวแยกวิเคราะห์และตัวทำให้เป็นอนุกรมมีอยู่สำหรับทุกภาษาโปรแกรมยอดนิยม
ประวัติของ JSON เริ่มต้นขึ้นในช่วงต้นทศวรรษ 2000 เมื่อ Douglas Crockford ได้สกัดเซตย่อยของไวยากรณ์ JavaScript สำหรับการแลกเปลี่ยนข้อมูล ในปี 2013 รูปแบบนี้ได้รับการมาตรฐานเป็น ECMA-404 และต่อมาเป็น ISO/IEC 21778:2017 ชื่อย่อมาจาก JavaScript Object Notation
ข้อได้เปรียบหลักของ JSON คือไวยากรณ์ที่เรียบง่ายที่สุด ใช้เพียงหกประเภทในการอธิบายข้อมูล: สตริง ตัวเลข บูลีน null อาร์เรย์ และออบเจ็กต์ ซึ่งเพียงพอสำหรับการแสดงโครงสร้างข้อมูลใดๆ ที่ใช้ในแอปพลิเคชัน
ไวยากรณ์ JSON ง่ายมาก: ข้อมูลจะแสดงเป็นคู่คีย์-ค่า โดยที่คีย์เป็นสตริงในเครื่องหมายคำพูดคู่ และค่าเป็นหนึ่งในหกประเภทพื้นฐาน ออบเจ็กต์อยู่ในวงเล็บปีกกา อาร์เรย์อยู่ในวงเล็บเหลี่ยม สตริงต้องใช้เครื่องหมายคำพูดคู่ เครื่องหมายคำพูดเดี่ยวไม่อนุญาต
ตัวเลขใน JSON สามารถเป็นจำนวนเต็มหรือทศนิยม บวกหรือลบ พร้อมสัญกรณ์เลขยกกำลัง ค่าบูลีนแสดงด้วยลิเทอรัล true และ false และการไม่มีค่าแสดงด้วย null อาร์เรย์ประกอบด้วยเซตของค่าที่เรียงลำดับของทุกประเภท รวมถึงอาร์เรย์และออบเจ็กต์ที่ซ้อนกัน
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "การรองรับการซ้อน"
}
}
| ประเภท | ตัวอย่าง | คำอธิบาย |
|---|---|---|
| สตริง | “ข้อความ” |
ในเครื่องหมายคำพูดคู่ พร้อมลำดับการหนี |
| ตัวเลข | 42 |
จำนวนเต็ม ทศนิยม เลขยกกำลัง |
| บูลีน | true |
true หรือ false — ไม่ต้องใช้เครื่องหมายคำพูด |
| null | null |
การไม่มีค่า |
| ออบเจ็กต์ | {} |
เซตที่ไม่เรียงลำดับของคู่คีย์-ค่า |
| อาร์เรย์ | [] |
รายการค่าที่เรียงลำดับ |
JSON เป็นรูปแบบการแลกเปลี่ยนข้อมูลหลักสำหรับ REST API ในการพัฒนามือถือและเว็บ เซิร์ฟเวอร์ส่ง JSON ในเนื้อหาของการตอบกลับ ไคลเอนต์ส่งในเนื้อหาของคำขอ ส่วนหัว Content-Type มาตรฐานสำหรับ JSON คือ application/json
REST API สมัยใหม่ใช้ JSON เพื่อส่งข้อมูลทุกประเภท: จากรายการง่ายๆ ไปจนถึงโครงสร้างซ้อนที่ซับซ้อนพร้อมความสัมพันธ์ระหว่างเอนทิตี ไลบรารีของไคลเอนต์ (เช่น Axios ใน JavaScript หรือ Retrofit บน Android) จะทำการทำให้เป็นอนุกรมและดีซีเรียลไลซ์ JSON โดยอัตโนมัติ ช่วยให้นักพัฒนาไม่ต้องแยกวิเคราะห์ด้วยตนเอง
ข้อได้เปรียบที่สำคัญของ JSON ใน REST API คือความสามารถในการถ่ายโอนข้อมูลบางส่วน (การตอบกลับบางส่วน) ผ่านพารามิเตอร์คำค้นหา รวมถึงการรองรับทรัพยากรที่ซ้อนกันโดยไม่ต้องมีคำขอเพิ่มเติมไปยังเซิร์ฟเวอร์
การแยกวิเคราะห์ JSON บนแพลตฟอร์มมือถือทำได้โดยใช้เครื่องมือในตัว Android ใช้ Gson ของ Google หรือ Moshi ของ Square iOS ใช้โปรโตคอล Codable กับ JSONDecoder แต่ละแพลตฟอร์มมีเครื่องมือที่สะดวกสำหรับการแปลง JSON เป็นออบเจ็กต์ดั้งเดิมและกลับกัน
บน Android วิธีการที่นิยมใช้ Gson หรือ Moshi เพียงกำหนดคลาสข้อมูลด้วยคำอธิบายประกอบ @SerializedName และเรียก fromJson สำหรับการดีซีเรียลไลซ์ ไลบรารีจะจับคู่ชื่อฟิลด์ JSON กับคุณสมบัติของคลาสโดยอัตโนมัติ
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
data class User(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("email") val email: String
)
fun parseJson(jsonString: String): User {
val gson = Gson()
return gson.fromJson(jsonString, User::class.java)
}
บน iOS ใช้โปรโตคอลในตัว Codable กับ JSONDecoder โครงสร้างข้อมูลถูกประกาศเป็น struct ที่สอดคล้องกับ Codable หลังจากนั้น JSON จะถูกแยกวิเคราะห์ด้วยบรรทัดเดียว JSONEncoder ทำการซีเรียลไลซ์ย้อนกลับ — แปลงออบเจ็กต์เป็น JSON สำหรับส่งไปยังเซิร์ฟเวอร์
import Foundation
struct User: Codable {
let id: Int
let name: String
let email: String
}
func parseJSON(from data: Data) throws -> User {
let decoder = JSONDecoder()
return try decoder.decode(User.self, from: data)
}
JSON และ XML เป็นสองรูปแบบหลักสำหรับการส่งข้อมูลที่มีโครงสร้าง JSON ชนะในเรื่องความเรียบง่ายและประสิทธิภาพ XML ชนะในเรื่องความเข้มงวดและการตรวจสอบ การเลือกระหว่างพวกเขาขึ้นอยู่กับข้อกำหนดของโครงการ: REST API มักใช้ JSON เอกสารที่ซับซ้อนพร้อมสคีมาใช้ XML
XML ต้องใช้แท็กปิดสำหรับทุกองค์ประกอบ ซึ่งเพิ่มขนาดข้อมูล 2-3 เท่าเมื่อเทียบกับ JSON ในขณะเดียวกัน XML รองรับเนมสเปซ สคีมา XSD คุณลักษณะ และการแปลง XSLT ทำให้มีประสิทธิภาพมากขึ้นสำหรับการจัดการเอกสารและการรวมระบบองค์กร
| ลักษณะ | JSON | XML |
|---|---|---|
| ไวยากรณ์ | เรียบง่ายที่สุด คีย์-ค่า | แบบแท็ก แท็กเปิดและปิด |
| ขนาดข้อมูล | กะทัดรัด | ใหญ่กว่า JSON 2-3 เท่า |
| ประเภทข้อมูล | หกประเภทพื้นฐาน | เฉพาะข้อความ ประเภทผ่านสคีมา |
| การตรวจสอบ | ไม่มีในตัว ผ่าน JSON Schema | XSD — เข้มงวดและเติบโตเต็มที่ |
| เนมสเปซ | ไม่มี | รองรับเนมสเปซอย่างเต็มที่ |
| ความเร็วในการแยกวิเคราะห์ | สูง | ต่ำกว่าเนื่องจากความซับซ้อน |
ตัวอย่าง แสดงการดำเนินการทั่วไปกับ JSON ในการพัฒนามือถือ: การแยกวิเคราะห์การตอบกลับ API การสร้าง JSON สำหรับส่ง และการประมวลผลโครงสร้างที่ซ้อนกัน การเข้าใจรูปแบบเหล่านี้จำเป็นสำหรับนักพัฒนาแอปพลิเคชันมือถือทุกคน
ใน JavaScript JSON.stringify แปลงออบเจ็กต์เป็นสตริง JSON อาร์กิวเมนต์ที่สองสามารถเป็นอาร์เรย์ของคีย์สำหรับการทำให้เป็นอนุกรมแบบเลือก หรือฟังก์ชันแทนที่ อาร์กิวเมนต์ที่สามกำหนดการเยื้องสำหรับการจัดรูปแบบ
interface Order {
id: string;
items: OrderItem[];
total: number;
createdAt: string;
}
const order: Order = {
id: 'ord_001',
items: [{ product: 'phone', quantity: 2 }],
total: 1599.98,
createdAt: '2026-07-03T10:00:00Z'
};
const jsonString = JSON.stringify(order, null, 2);
ใน Kotlin กับไลบรารี Moshi ออบเจ็กต์ JSON ที่ซ้อนกันจะถูกจัดการผ่านคลาสข้อมูลที่ซ้อนกัน คำอธิบายประกอบ @Json ระบุชื่อฟิลด์ JSON หากแตกต่างจากชื่อคุณสมบัติของคลาส อาร์เรย์จะแสดงเป็น List พร้อมประเภทขององค์ประกอบ
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
data class ApiResponse(
val status: String,
val data: List<Product>,
val pagination: Pagination
)
data class Product(
val id: Int,
val title: String,
val price: Double
)
data class Pagination(
val page: Int,
val total: Int
)
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
JSON Schema เป็นภาษาสำหรับอธิบายโครงสร้างของเอกสาร JSON คล้ายกับ XSD สำหรับ XML การใช้ JSON Schema คุณสามารถระบุฟิลด์บังคับ ประเภทข้อมูล ช่วงค่า รูปแบบสตริง และโครงสร้างที่ซ้อนกัน การตรวจสอบสคีมาจะตรวจจับข้อผิดพลาดของข้อมูลก่อนที่จะถูกประมวลผลในแอปพลิเคชัน
JSON Schema ถูกใช้อย่างแพร่หลายใน OpenAPI (Swagger) สำหรับจัดทำเอกสาร REST API ในฟอร์มตรวจสอบข้อมูลนำเข้า และในการทดสอบ ไฟล์สคีมาเองก็เป็นเอกสาร JSON ซึ่งอนุญาตให้ตัวแยกวิเคราะห์ JSON มาตรฐานอ่านได้ มีตัวตรวจสอบออนไลน์และไลบรารีสำหรับทุกภาษาโปรแกรมยอดนิยม
ในการพัฒนามือถือ JSON Schema ใช้สำหรับตรวจสอบการตอบกลับจากเซิร์ฟเวอร์ในขั้นตอนการทดสอบและสำหรับตรวจสอบไฟล์การกำหนดค่า ไลบรารีเช่น network-validator บน Android และ json-schema-validator ช่วยให้สามารถฝังการตรวจสอบลงในกระบวนการพัฒนาโดยตรง ป้องกันข้อผิดพลาดในขั้นตอนแรกเริ่ม
คำถามที่พบบ่อย
JSON รองรับหกประเภท: สตริง (ในเครื่องหมายคำพูดคู่) ตัวเลข (จำนวนเต็มและทศนิยม) บูลีน (true/false) null ออบเจ็กต์ (คู่คีย์-ค่าใน {}) และอาร์เรย์ (รายการค่าใน []) ซึ่งเพียงพอสำหรับโครงสร้างข้อมูลใดๆ ในแอปพลิเคชัน
ไม่ มาตรฐาน JSON ไม่รองรับความคิดเห็น หากคุณต้องการความคิดเห็น ให้ใช้ JSON5 (JSON แบบขยาย) หรือเพิ่มฟิลด์คำอธิบาย เช่น “_comment”: “คำอธิบาย” เครื่องมือบางอย่าง เช่น VS Code รองรับความคิดเห็นในไฟล์ JSON การกำหนดค่า แต่เป็นส่วนขยายที่ไม่ได้มาตรฐาน
JSONB เป็นรูปแบบการจัดเก็บแบบไบนารีสำหรับ JSON ใน PostgreSQL ต่างจาก JSON แบบข้อความ JSONB ประมวลผลได้เร็วกว่า รองรับการสร้างดัชนี (ดัชนี GIN) และรับประกันความเป็นเอกลักษณ์ของคีย์ อย่างไรก็ตาม JSONB ใช้พื้นที่ดิสก์มากกว่าเนื่องจากเมทาดาทาที่เพิ่มเข้ามา
ใช้ JSONLint (jsonlint.com) สำหรับการตรวจสอบอย่างรวดเร็ว, JSON.parse() ในตัวของ JavaScript พร้อม try-catch หรือปลั๊กอิน IDE การตรวจสอบรวมถึงการตรวจสอบเครื่องหมายคำพูดที่ถูกต้อง การปิดวงเล็บ และความสอดคล้องของประเภท สำหรับสคีมาที่ซับซ้อน ให้ใช้ JSON Schema Validator
ไม่มีข้อจำกัด ในข้อกำหนด JSON ในทางปฏิบัติ ขนาดถูกจำกัดโดยหน่วยความจำของอุปกรณ์และความสามารถของตัวแยกวิเคราะห์ สำหรับแอปพลิเคชันมือถือ แนะนำให้ไม่เกิน 1-2 MB ต่อการตอบกลับ และสำหรับข้อมูลขนาดใหญ่ ให้ใช้การแบ่งหน้าหรือการสตรีม
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม