Go:
การทำงานกับ JSON
วิธีการ:
ใน Go, แพ็กเกจ encoding/json
คือวิธีการเข้าถึงการจัดการ JSON ให้กลไกในการแปลงโครงสร้างข้อมูล Go เป็น JSON (การมาร์แชลลิ่ง) และกลับคืน (การอันมาร์แชลลิ่ง) ด้านล่างคือตัวอย่างเบื้องต้นในการเริ่มต้น:
การเข้ารหัส (มาร์ชัลลิ่ง)
ในการแปลงโครงสร้าง Go เป็น JSON คุณสามารถใช้ json.Marshal
พิจารณาโครงสร้าง Go ต่อไปนี้:
package main
import (
"encoding/json"
"fmt"
"log"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
Languages []string `json:"languages"`
}
func main() {
user := User{1, "JohnDoe", []string{"Go", "JavaScript", "Python"}}
userJSON, err := json.Marshal(user)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(userJSON))
}
ผลลัพธ์:
{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}
การถอดรหัส (อันมาร์ชัลลิ่ง)
ในการแปลง JSON เป็นโครงสร้างข้อมูล Go ใช้ json.Unmarshal
:
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
jsonStr := `{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}`
var user User
err := json.Unmarshal([]byte(jsonStr), &user)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", user)
}
กำหนดโครงสร้าง User
เช่นเดิม โค้ดนี้จะแปลงสตริง JSON เป็นอินสแตนซ์ของ User
ผลลัพธ์:
{ID:1 Username:JohnDoe Languages:[Go JavaScript Python]}
ลงลึก
แพ็กเกจ encoding/json
ใน Go มอบ API ที่เรียบง่ายและคลายความซับซ้อนในการจัดการ JSON มาตั้งแต่ช่วงต้นของการพัฒนา Go แพ็กเกจนี้สะท้อนถึงปรัชญาของ Go ที่เน้นความเรียบง่ายและประสิทธิภาพ อย่างไรก็ตามการใช้การสะท้อน (reflection) โดย encoding/json
เพื่อตรวจสอบและแก้ไขโครงสร้างข้อมูลในระหว่างเวลาทำงานอาจนำไปสู่ประสิทธิภาพที่ไม่เหมาะสมในสถานการณ์ที่ใช้ CPU มาก
ทางเลือกอย่าง json-iterator/go
และ ffjson
ได้ปรากฏขึ้นมา เพื่อให้การประมวลผล JSON เร็วขึ้นโดยการสร้างโค้ดมาร์แชลลิ่งและอันมาร์แชลลิ่งที่คงที่ อย่างไรก็ตาม encoding/json
ยังคงเป็นแพ็กเกจที่ใช้กันทั่วไปเนื่องจากความเรียบง่ายความแข็งแกร่งและเป็นส่วนหนึ่งของไลบรารีมาตรฐาน ซึ่งรับประกันความเข้ากันได้และความเสถียรในรุ่นของ Go
แม้ว่าจะมีประสิทธิภาพช้ากว่าเมื่อเปรียบเทียบ ความง่ายในการใช้งานและการรวมกับระบบประเภทข้อมูลของ Go ทำให้ encoding/json
เหมาะสำหรับแอปพลิเคชันส่วนใหญ่ สำหรับผู้ที่ทำงานในบริบทที่ประสิทธิภาพมีความสำคัญ การสำรวจไลบรารีภายนอกอาจคุ้มค่า แต่สำหรับหลายคน ไลบรารีมาตรฐานมีความสมดุลที่เหมาะสมระหว่างความเร็ว ความเรียบง่าย และความน่าเชื่อถือ