0Pricing
Go Academy · บทเรียน

การเข้ารหัสและถอดรหัส 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. อ่านไฟล์ด้วย os และ bufio
  2. การเขียนไฟล์และไฟล์ชั่วคราว
  3. การเข้ารหัสและถอดรหัส JSON
  4. JSON และ CSV แบบสตรีม
← กลับไปที่ Go Academy