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 в плане простоты и эффективности. Однако использование рефлексии encoding/json
для осмотра и изменения структур во время выполнения может привести к снижению производительности в сценариях, требующих интенсивной работы процессора.
Появились альтернативы, такие как json-iterator/go
и ffjson
, предлагающие более быструю обработку JSON за счет генерации статического кода маршалинга и демаршалинга. Однако encoding/json
остается наиболее часто используемым пакетом из-за его простоты, надежности и того факта, что он является частью стандартной библиотеки, что обеспечивает совместимость и стабильность между версиями Go.
Несмотря на относительно медленную производительность, легкость использования и интеграция с системой типов Go делают encoding/json
подходящим для большинства приложений. Для тех, кто работает в контексте, где производительность имеет первостепенное значение, изучение внешних библиотек может быть оправданным, но для многих стандартная библиотека находит правильный баланс между скоростью, простотой и надежностью.