Skip to content

Шпаргалка

Быстрый поиск часто используемых API и фрагментов кода.

Запросы по пути

ОперацияФункцияПример
Получить строкуGetStringjson.GetString(data, "user.name")
Получить целое числоGetIntjson.GetInt(data, "count")
Получить число с плавающей точкойGetFloatjson.GetFloat(data, "price")
Получить логическое значениеGetBooljson.GetBool(data, "enabled")
Получить массивGetArrayjson.GetArray(data, "items")
Получить объектGetObjectjson.GetObject(data, "user")
Получить любое значениеGetjson.Get(data, "items[0].id")
Обобщённое получениеGetTyped[T]json.GetTyped[User](data, "user")

Со значениями по умолчанию

Функции GetString, GetInt, GetFloat, GetBool и другие поддерживают необязательный параметр значения по умолчанию:

ОперацияФункцияПример
СтрокаGetStringjson.GetString(data, "name", "unknown")
Целое числоGetIntjson.GetInt(data, "count", 0)
Число с плавающей точкойGetFloatjson.GetFloat(data, "rate", 0.5)
Логическое значениеGetBooljson.GetBool(data, "debug", false)

Операции изменения

ОперацияФункцияПример
Установить значениеSetjson.Set(data, "user.name", "Alice")
Пакетная установкаSetMultiplejson.SetMultiple(data, map[string]any{"a": 1, "b": 2})
Установка с созданием путиSetCreatejson.SetCreate(data, "a.b.c", 1)
Пакетная установка с созданием путиSetMultipleCreatejson.SetMultipleCreate(data, updates)
Удалить значениеDeletejson.Delete(data, "user.temporary")
Удалить с очисткойDeleteCleanjson.DeleteClean(data, "user.temporary")
go
// Установка значения
result, err := json.Set(`{"user":{}}`, "user.name", "Alice")
// {"user":{"name":"Alice"}}

// Последовательная установка нескольких полей
result, err = json.Set(data, "user.name", "Bob")
result, err = json.Set(result, "user.age", 25)

// Удаление
result, err = json.Delete(data, "user.temporary")

Сериализация

ОперацияФункцияПример
КодированиеMarshaljson.Marshal(data)
Форматированное кодированиеMarshalIndentjson.MarshalIndent(data, "", " ")
ДекодированиеUnmarshaljson.Unmarshal(bytes, &v)
РазборParsevar v T; json.Parse(jsonStr, &v)
Разбор в anyParseAnyjson.ParseAny(jsonStr)
ФорматированиеPrettifyjson.Prettify(jsonStr)
СжатиеCompactjson.Compact(&buf, []byte(data))
go
// Кодирование
b, err := json.Marshal(map[string]any{"name": "test"})

// Форматированный вывод
pretty, err := json.MarshalIndent(data, "", "  ")

// Разбор в структуру
var result map[string]any
err = json.Parse(`{"name": "test"}`, &result)

// Разбор в any
parsed, err := json.ParseAny(`{"name": "test"}`)

// Форматирование JSON строки
pretty, err = json.Prettify(`{"name":"Alice","age":30}`)

Валидация

ОперацияФункцияПример
Быстрая валидацияValidjson.Valid([]byte(data))
go
// Быстрая валидация
if json.Valid([]byte(data)) {
    // Корректный JSON
}

// Валидация по Schema
schema := &json.Schema{
    Type:     "object",
    Required: []string{"name"},
    Properties: map[string]*json.Schema{
        "name": {Type: "string"},
        "age":  {Type: "number"},
    },
}
p, err := json.New()
if err != nil {
    panic(err)
}
errors, _ := p.ValidateSchema(data, schema)

Вспомогательные функции

ОперацияФункцияПример
СравнениеCompareJSONjson.CompareJSON(a, b)
СлияниеMergeJSONjson.MergeJSON(a, b)
Множественное слияниеMergeManyjson.MergeMany([]string{s1, s2, s3})
go
// Сравнение (игнорирует порядок ключей и точность чисел)
equal, _ := json.CompareJSON(`{"a":1.0,"b":2}`, `{"b":2,"a":1}`)
fmt.Println("Equal:", equal) // true (игнорирует порядок и точность)

// Слияние JSON
base := `{"database":{"host":"localhost","port":5432},"debug":false}`
override := `{"database":{"host":"prod-server","ssl":true},"monitoring":true}`

// Слияние
merged, _ := json.MergeJSON(base, override)
// Результат: {"database":{"host":"prod-server","port":5432,"ssl":true},"debug":false,"monitoring":true}

// Множественное слияние
result, _ := json.MergeMany([]string{
    `{"a":1}`,
    `{"b":2}`,
    `{"c":3}`,
})

Методы Processor

go
// Создание процессора
processor, err := json.New()
if err != nil {
    panic(err)
}
defer processor.Close()

// Получение значения
result := processor.GetString(data, "user.profile.name")

// Безопасное получение (возвращает AccessResult)
accessResult := processor.SafeGet(data, "user.age")
age, err := accessResult.AsInt()

Создание с конфигурацией

go
// Конфигурация по умолчанию
processor, err := json.New(json.DefaultConfig())

// Безопасная конфигурация (для обработки недоверенных входных данных)
processor, err = json.New(json.SecurityConfig())

// Пользовательская конфигурация
cfg := json.DefaultConfig()
cfg.CreatePaths = true
processor, err = json.New(cfg)

Потоковая обработка

Processor.ForeachFile (большие файлы)

go
// Обработка большого файла
processor, err := json.New()
if err != nil {
    panic(err)
}
defer processor.Close()

err = processor.ForeachFile("large-data.json", func(key any, item *json.IterableValue) error {
    // Обработка элемента данных
    id := item.GetInt("id")
    name := item.GetString("name")
    return nil // Возврат item.Break() прервёт итерацию
})

NDJSON/JSONL

go
// Разбор JSONL
results, err := json.ParseJSONL(jsonlBytes)

// Обобщённый разбор (с использованием StreamLinesInto)
file, _ := os.Open("data.jsonl")
defer file.Close()
users, err := json.StreamLinesInto[User](file, func(lineNum int, user User) error {
    return nil
})

// Потоковая запись
outputFile, _ := os.Create("output.jsonl")
defer outputFile.Close()
writer := json.NewJSONLWriter(outputFile)
_ = writer.Write(map[string]any{"name": "Alice"})
_ = writer.Write(map[string]any{"name": "Bob"})

Параметры конфигурации

go
// Рекомендуемый способ: модификация на основе конфигурации по умолчанию
cfg := json.DefaultConfig()
cfg.MaxJSONSize = 200 * 1024 * 1024 // Пользовательский предел размера
cfg.FullSecurityScan = true          // Включить полный сканирование безопасности

Предустановки конфигурации

go
// Конфигурация по умолчанию
cfg := json.DefaultConfig()

// Безопасная конфигурация (для обработки недоверенных входных данных)
// cfg = json.SecurityConfig()

// Конфигурация форматирования
// cfg = json.PrettyConfig()

Синтаксис путей

СинтаксисОписаниеПример
.propertyДоступ к свойствуuser.name
[n]Индекс массиваitems[0]
[*]Подстановочный знакitems[*].id
[start:end]Срезitems[0:5]
[start:end:step]Срез с шагомitems[0:10:2]
{field1,field2}Извлечение полейuser{name,email}
[+]Добавлениеitems[+]
[-1]Отрицательный индекс (последний)items[-1]

Распространённые паттерны

Безопасное получение вложенных значений

go
// Использование функции получения со значением по умолчанию
name := json.GetString(data, "user.profile.name", "unknown")

// Использование Get, когда нужно различать типы ошибок
val, err := json.Get(data, "user.profile.name")
if err != nil {
    if errors.Is(err, json.ErrPathNotFound) {
        // Путь не найден
    } else if errors.Is(err, json.ErrTypeMismatch) {
        // Несоответствие типов
    }
}

Получение со значением по умолчанию

go
// Функции GetString/GetInt и др. поддерживают необязательный параметр значения по умолчанию
timeout := json.GetInt(data, "timeout", 30)
debug := json.GetBool(data, "debug", false)
name := json.GetString(data, "user.nickname", "unknown")

Утверждение типа

go
val, _ := json.Get(data, "value")
switch v := val.(type) {
case string:
    fmt.Println("Строка:", v)
case float64:
    fmt.Println("Число:", v)
case bool:
    fmt.Println("Логическое:", v)
case []any:
    fmt.Println("Массив:", len(v), "элементов")
case map[string]any:
    fmt.Println("Объект:", len(v), "ключей")
}

Слияние конфигураций

go
// Конфигурация по умолчанию + пользовательская конфигурация
defaults := `{"timeout": 30, "retries": 3}`
userConfig := `{"timeout": 60, "debug": true}`

merged, _ := json.MergeJSON(defaults, userConfig)
// {"timeout": 60, "retries": 3, "debug": true}

Обработка ошибок

go
val, err := json.Get(data, path)
if err != nil {
    // Проверка типа ошибки
    if errors.Is(err, json.ErrPathNotFound) {
        // Путь не найден
    } else if errors.Is(err, json.ErrInvalidJSON) {
        // Неверный формат JSON
    } else if errors.Is(err, json.ErrTypeMismatch) {
        // Несоответствие типов
    }
}

Управление кэшем

go
// Прогрев кэша
paths := []string{"user.name", "user.email", "items[*].id"}
result, _ := json.WarmupCache(data, paths)
fmt.Printf("Прогрев завершён: %d/%d\n", result.Successful, result.TotalPaths)

// Очистка кэша
json.ClearCache()

// Получение статистики
stats := json.GetStats()
fmt.Printf("Коэффициент попадания в кэш: %.2f%%\n", stats.HitRatio * 100)

Глобальный процессор

go
// Установка пользовательского глобального процессора
cfg := json.SecurityConfig()
p, err := json.New(cfg)
if err != nil {
    panic(err)
}
json.SetGlobalProcessor(p)

// Теперь все функции уровня пакета используют этот процессор
name := json.GetString(data, "user.name")

// Очистка при завершении приложения
defer json.ShutdownGlobalProcessor()

Смотрите также