Skip to content

Библиотека обработки JSON

github.com/cybergodev/json — высокопроизводительная, потокобезопасная библиотека Go для обработки JSON. Предоставляет богатый набор функций для работы с JSON, включая парсинг, запросы, модификацию, валидацию и форматирование, сохраняя 100% совместимость со стандартной библиотекой encoding/json.

Основные возможности

  • 100% совместимость с encoding/json — бесшовная замена стандартной библиотеки без изменения существующего кода
  • Потокобезопасность — все операции безопасны для параллельного выполнения в высоконагруженных сценариях
  • Запросы по пути — поддержка выражений пути в стиле JSONPath, включая подстановочные знаки и срезы
  • Типобезопасное получение — обобщённый API (GetTyped[T]) и методы типизированного получения (SafeGet)
  • Потоковая обработка — поддержка потоковой обработки больших файлов и формата JSONL/NDJSON
  • Защита безопасности — встроенная валидация входных данных, ограничение глубины, обнаружение опасных паттернов
  • Высокопроизводительное кэширование — интеллектуальное кэширование, оптимизация предпарсинга, переиспользование объектов из пула
  • Расширяемость — система хуков, пользовательские кодировщики, валидаторы

Установка

bash
go get github.com/cybergodev/json

Быстрый старт за 30 секунд

go
package main

import (
    "fmt"
    "github.com/cybergodev/json"
)

func main() {
    data := `{"name": "CyberGo", "version": 1, "tags": ["json", "go"]}`

    // 1. Получение значения по пути
    name := json.GetString(data, "name")
    fmt.Println("Name:", name)

    // 2. Модификация значения
    updated, _ := json.Set(data, "version", 2)
    fmt.Println("Updated:", updated)

    // 3. Валидация
    if json.Valid([]byte(data)) {
        fmt.Println("Valid JSON")
    }

    // 4. Получение со значением по умолчанию
    desc := json.GetString(data, "description", "Описание по умолчанию")
    fmt.Println("Description:", desc)

    // 5. Декодирование в структуру
    type Config struct {
        Name    string   `json:"name"`
        Version int      `json:"version"`
        Tags    []string `json:"tags"`
    }
    var config Config
    json.Unmarshal([]byte(data), &config)
    fmt.Printf("Config: %+v\n", config)
}

Обзор возможностей

Операции с путями

ФункцияМетодОписание
Получение значенияGet, GetString, GetInt...Поддержка вложенных путей и индексов массивов
Получение со значением по умолчаниюGetString, GetInt и др.Передача параметра defaultValue
Установка значенияSetАвтоматическое создание несуществующих путей (Config.CreatePaths)
Удаление значенияDeleteУдаление значения по указанному пути

Кодирование и декодирование

ФункцияМетодОписание
КодированиеMarshal, MarshalIndent100% совместимость с encoding/json
ДекодированиеUnmarshal, Parse, ParseAnyПоддержка обобщений и типобезопасности
ФорматированиеPrettify, CompactКрасивое форматирование / сжатие JSON

Расширенные возможности

ФункцияМетод/ТипОписание
Обобщённый APIGetTyped[T]Типобезопасное обобщённое получение
ПредпарсингProcessor.PreParse, Processor.GetFromParsedОдин парсинг — множество запросов
Безопасное получениеSafeGetAccessResultЦепочечные преобразования типов
Потоковая обработкаProcessor.ForeachFileЭкономия памяти при работе с большими файлами
Обработка JSONLStreamLinesInto[T]Конвейер логов/данных
Валидация SchemaValidateSchemaВалидация по JSON Schema

Навигация по модулям

МодульОписание
Быстрый стартУстановка, базовое использование, ключевые концепции
Синтаксис путейЗапросы по пути, срезы, подстановочные знаки, извлечение полей
Документация APIПолный справочник API
Обработка больших файловПотоковая обработка, поблочное чтение/запись, оптимизация памяти
Примеры использованияПрактические примеры кода
Продвинутые примерыПакетное кодирование, предпарсинг, система хуков

Характеристики производительности

  • Парсинг без копирования — сокращение выделения памяти
  • Интеллектуальное кэширование — автоматическое кэширование горячих путей, поддержка прогрева кэша
  • Пул объектов — переиспользование промежуточных объектов, снижение нагрузки на GC
  • Параллельная обработка — автоматическая параллелизация пакетных операций
  • Оптимизация предпарсинга — однократный парсинг большого JSON для множества запросов

Сравнение со стандартной библиотекой

Возможностьencoding/jsoncybergodev/json
Базовое кодирование/декодирование✅ 100% совместимость
Запросы по пути✅ Синтаксис с точкой и скобками
Типобезопасное получение✅ Обобщённый API
Потоковая обработкаБазовая✅ Расширенная
Поддержка JSONL✅ Нативная поддержка
Валидация безопасности✅ Встроенная защита
Система хуков✅ Расширяемая
Оптимизация кэширования✅ Интеллектуальное кэширование

Руководство быстрого выбора

СценарийРекомендуемое решение
Простой запросGetString(data, "path")
Со значением по умолчаниюGetString(data, "path", "default")
ТипобезопасностьGetTyped[User](data, "user")
Частые запросыProcessor + PreParse
Большие файлыProcessor.ForeachFile
Недоверенный вводSecurityConfig()

Что дальше