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