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

ทบทวน encoding/json

แปลง JSON ไปมา

ทบทวน encoding/json เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

JSON ใน Go

JSON เป็นรูปแบบข้อมูลที่ใช้กันมากที่สุดสำหรับ API แพ็กเกจมาตรฐาน encoding/json ของ Go ใช้แปลงค่าของ Go ไปเป็นข้อความ JSON และแปลงกลับได้

Marshal: จาก Go เป็น JSON

json.Marshal แปลงค่าของ Go เป็นสไลซ์ไบต์ของ JSON แปลงสไลซ์นั้นเป็นสตริงเพื่อพิมพ์ผลลัพธ์

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1, "b": 2}
	b, _ := json.Marshal(data)
	fmt.Println(string(b))
}

การแปลงโครงสร้าง

โครงสร้างจะถูกแปลงทีละฟิลด์ ฟิลด์ที่ส่งออกจะกลายเป็นคีย์ JSON

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := json.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

Unmarshal: จาก JSON เป็น Go

json.Unmarshal แยกวิเคราะห์ไบต์ JSON ให้เป็นค่าของ Go ส่ง พอยน์เตอร์ เข้าไป เพื่อให้เมธอดเติมค่าลงในตัวแปรของคุณได้

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	var u User
	json.Unmarshal([]byte("{\"Name\":\"Bob\",\"Age\":25}"), &u)
	fmt.Println(u)
}

แท็กสำหรับชื่อคีย์

ใช้แท็ก json เพื่อควบคุมชื่อคีย์ตามที่กล่าวไปก่อนหน้านี้ ในที่นี้ฟิลด์ Name จะจับคู่กับชื่อคีย์ JSON

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string "json:\"name\""
}

func main() {
	b, _ := json.Marshal(User{"Ann"})
	fmt.Println(string(b))
}

ตรวจสอบข้อผิดพลาดเสมอ

ทั้ง Marshal และ Unmarshal จะคืนค่าข้อผิดพลาด ในโค้ดจริงอย่าเพิกเฉยต่อข้อผิดพลาดนี้ JSON ที่รูปแบบไม่ถูกต้องหรือชนิดที่ไม่รองรับจะทำให้เกิดข้อผิดพลาด

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v int
	err := json.Unmarshal([]byte("not json"), &v)
	fmt.Println(err)
}

การถอดรหัสลงในแมป

เมื่อคุณไม่ทราบโครงสร้างข้อมูลล่วงหน้า ให้ถอดรหัสลงใน map[string]interface{}

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var m map[string]interface{}
	json.Unmarshal([]byte("{\"x\":1,\"y\":\"hi\"}"), &m)
	fmt.Println(m["x"], m["y"])
}

สไลซ์และอาร์เรย์

อาร์เรย์ JSON จะแมปเป็นสไลซ์ของ Go การแปลงสไลซ์จะได้อาร์เรย์ JSON

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	b, _ := json.Marshal([]string{"a", "b", "c"})
	fmt.Println(string(b))
}

การจัดรูปแบบให้อ่านง่าย

json.MarshalIndent จะเพิ่มการเยื้องเพื่อให้ผลลัพธ์อ่านเข้าใจได้ง่าย

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1}
	b, _ := json.MarshalIndent(data, "", "  ")
	fmt.Println(string(b))
}

ตัวเลขเป็น float64

เมื่อถอดรหัสลงใน interface{} ตัวเลข JSON ทั้งหมดจะกลายเป็น float64 ใน Go ให้แปลงอย่างชัดเจนหากต้องการชนิด int

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v interface{}
	json.Unmarshal([]byte("42"), &v)
	fmt.Printf("%T %v\n", v, v)
}

การแปลงไปกลับ

คุณสามารถแปลงเป็น JSON แล้วถอดรหัสกลับเพื่อคัดลอกข้อมูลผ่าน JSON ได้ ค่าต่าง ๆ จะกลับมาเหมือนเดิมสำหรับชนิดที่รองรับ

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	orig := []int{1, 2, 3}
	b, _ := json.Marshal(orig)
	var back []int
	json.Unmarshal(b, &back)
	fmt.Println(back)
}

ตรวจสอบอย่างรวดเร็ว

เหตุใดจึงต้องส่งพอยน์เตอร์ให้กับ json.Unmarshal

สรุปทบทวน

encoding/json:

  • json.Marshal แปลงค่าของ Go เป็น JSON
  • json.Unmarshal แยกวิเคราะห์ JSON ลงในพอยน์เตอร์
  • แท็กใช้เปลี่ยนชื่อคีย์ ตัวเลขจะถูกถอดรหัสเป็น float64 เมื่อลงใน interface{}
  • ตรวจสอบข้อผิดพลาดที่คืนมาเสมอ

คำถามที่พบบ่อย

บทเรียน “ทบทวน encoding/json” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ทบทวน encoding/json” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ทบทวน encoding/json”

แปลง JSON ไปมา คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ทบทวน encoding/json” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ทบทวน encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob และการเข้ารหัสไบนารี
← กลับไปที่ Go Academy