ทบทวน 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 เป็น JSONjson.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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ทบทวน encoding/json
- encoding/xml
- encoding/csv
- gob และการเข้ารหัสไบนารี