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 เหมาะสำหรับแอปพลิเคชันส่วนใหญ่ สำหรับผู้ที่ทำงานในบริบทที่ประสิทธิภาพมีความสำคัญ การสำรวจไลบรารีภายนอกอาจคุ้มค่า แต่สำหรับหลายคน ไลบรารีมาตรฐานมีความสมดุลที่เหมาะสมระหว่างความเร็ว ความเรียบง่าย และความน่าเชื่อถือ