การเข้ารหัสและถอดรหัส JSON
Marshal, Unmarshal และแท็กของสตรักต์
การเข้ารหัสและถอดรหัส JSON เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
ภาพรวมของ encoding/json
แพ็กเกจ encoding/json ของ Go แปลงค่า Go เป็น JSON ด้วย Marshal และแปลง JSON กลับเป็นค่า Go ด้วย Unmarshal โดยใช้แท็กโครงสร้างและรีเฟลกชัน
json.Marshal
json.Marshal แปลงค่า Go เป็นไบต์ JSON และคืนค่าข้อผิดพลาดสำหรับชนิดที่ไม่รองรับ เช่น แชนเนล ฟังก์ชัน และจำนวนเชิงซ้อน
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
u := User{Name: "Alice", Age: 30}
data, err := json.Marshal(u)
fmt.Println(string(data)) // {"name":"Alice","age":30}json.Unmarshal
json.Unmarshal ถอดรหัส JSON ลงในค่า Go โดยเป้าหมายต้องเป็นพอยน์เตอร์
var u User
err := json.Unmarshal(data, &u)
fmt.Println(u.Name) // "Alice"แท็กโครงสร้าง
ใช้แท็กโครงสร้าง json: เพื่อควบคุมชื่อฟิลด์ ละเว้นค่าที่ว่าง และข้ามฟิลด์ที่ไม่ส่งออก
type Product struct {
ID int `json:"id"`
Price float64 `json:"price,omitempty"` // omit if zero
secret string // unexported: ignored
}json.Encoder / json.Decoder
สำหรับการประมวลผลแบบสตรีม (เนื้อหาการตอบกลับและคำขอ HTTP) ให้ใช้ Encoder และ Decoder แทน Marshal/Unmarshal เพื่อหลีกเลี่ยงการโหลดข้อมูลทั้งหมดลงในหน่วยความจำ
// Writing
json.NewEncoder(w).Encode(user)
// Reading
var u User
json.NewDecoder(r.Body).Decode(&u)การถอดรหัสลงใน map[string]any
ถอดรหัส JSON ที่ไม่ทราบโครงสร้างลงในแมปทั่วไป:
var m map[string]any
json.Unmarshal(data, &m)
fmt.Println(m["name"])json.Number
โดยค่าเริ่มต้น ตัวเลขในแมปทั่วไปจะถูกถอดรหัสเป็น float64 ใช้ decoder.UseNumber() เพื่อถอดรหัสเป็น json.Number โดยรักษาความแม่นยำไว้
dec := json.NewDecoder(r)
dec.UseNumber()
var m map[string]any
dec.Decode(&m)การ Marshal แบบกำหนดเอง
นำ json.Marshaler หรือ json.Unmarshaler ไปใช้เพื่อควบคุมการเข้ารหัสและการถอดรหัสของชนิดข้อมูล เช่น สำหรับรูปแบบวันที่แบบกำหนดเอง
func (d Date) MarshalJSON() ([]byte, error) {
return json.Marshal(d.Format("2006-01-02"))
}การละเว้นฟิลด์
ใช้ omitempty เพื่อข้ามค่าศูนย์ ใช้ json:"-" เพื่อแยกฟิลด์ออกจากเอาต์พุต JSON เสมอไม่ว่าค่าจะเป็นอะไร
Hidden string `json:"-"`การจัดการค่า null
JSON null จะถูกถอดรหัสเป็นค่าศูนย์ของ Go สำหรับค่าชนิดสเกลาร์ หรือกำหนดให้พอยน์เตอร์เป็น nil เมื่อนำพอยน์เตอร์ nil ไป Marshal ผลลัพธ์จะเป็น null
การจัดรูปแบบให้อ่านง่าย
ใช้ json.MarshalIndent สำหรับเอาต์พุตที่มนุษย์อ่านได้:
data, _ := json.MarshalIndent(u, "", " ")ตรวจสอบความเข้าใจอย่างรวดเร็ว
แท็กโครงสร้าง `json:"name,omitempty"` ทำอะไร?
สรุป: การเข้ารหัสและถอดรหัส JSON
ประเด็นสำคัญ:
- ใช้ json.Marshal/Unmarshal สำหรับข้อมูลในหน่วยความจำ และใช้ Encoder/Decoder สำหรับสตรีม
- แท็กโครงสร้างควบคุมชื่อ omitempty และการแยกออก
- ชนิดข้อมูลแบบกำหนดเองนำ Marshaler/Unmarshaler ไปใช้
- ใช้ json.MarshalIndent สำหรับเอาต์พุตเพื่อการแก้ไขข้อผิดพลาด
คำถามที่พบบ่อย
บทเรียน “การเข้ารหัสและถอดรหัส JSON” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเข้ารหัสและถอดรหัส JSON” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเข้ารหัสและถอดรหัส JSON”
Marshal, Unmarshal และแท็กของสตรักต์ คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การเข้ารหัสและถอดรหัส JSON” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- อ่านไฟล์ด้วย os และ bufio
- การเขียนไฟล์และไฟล์ชั่วคราว
- การเข้ารหัสและถอดรหัส JSON
- JSON และ CSV แบบสตรีม