Библиотека обработки 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, MarshalIndent | 100% совместимость с encoding/json |
| Декодирование | Unmarshal, Parse, ParseAny | Поддержка обобщений и типобезопасности |
| Форматирование | Prettify, Compact | Красивое форматирование / сжатие JSON |
Расширенные возможности
| Функция | Метод/Тип | Описание |
|---|---|---|
| Обобщённый API | GetTyped[T] | Типобезопасное обобщённое получение |
| Предпарсинг | Processor.PreParse, Processor.GetFromParsed | Один парсинг — множество запросов |
| Безопасное получение | SafeGet → AccessResult | Цепочечные преобразования типов |
| Потоковая обработка | Processor.ForeachFile | Экономия памяти при работе с большими файлами |
| Обработка JSONL | StreamLinesInto[T] | Конвейер логов/данных |
| Валидация Schema | ValidateSchema | Валидация по JSON Schema |
Навигация по модулям
| Модуль | Описание |
|---|---|
| Быстрый старт | Установка, базовое использование, ключевые концепции |
| Синтаксис путей | Запросы по пути, срезы, подстановочные знаки, извлечение полей |
| Документация API | Полный справочник API |
| Обработка больших файлов | Потоковая обработка, поблочное чтение/запись, оптимизация памяти |
| Примеры использования | Практические примеры кода |
| Продвинутые примеры | Пакетное кодирование, предпарсинг, система хуков |
Характеристики производительности
- Парсинг без копирования — сокращение выделения памяти
- Интеллектуальное кэширование — автоматическое кэширование горячих путей, поддержка прогрева кэша
- Пул объектов — переиспользование промежуточных объектов, снижение нагрузки на GC
- Параллельная обработка — автоматическая параллелизация пакетных операций
- Оптимизация предпарсинга — однократный парсинг большого JSON для множества запросов
Сравнение со стандартной библиотекой
| Возможность | encoding/json | cybergodev/json |
|---|---|---|
| Базовое кодирование/декодирование | ✅ | ✅ 100% совместимость |
| Запросы по пути | ❌ | ✅ Синтаксис с точкой и скобками |
| Типобезопасное получение | ❌ | ✅ Обобщённый API |
| Потоковая обработка | Базовая | ✅ Расширенная |
| Поддержка JSONL | ❌ | ✅ Нативная поддержка |
| Валидация безопасности | ❌ | ✅ Встроенная защита |
| Система хуков | ❌ | ✅ Расширяемая |
| Оптимизация кэширования | ❌ | ✅ Интеллектуальное кэширование |
Руководство быстрого выбора
| Сценарий | Рекомендуемое решение |
|---|---|
| Простой запрос | GetString(data, "path") |
| Со значением по умолчанию | GetString(data, "path", "default") |
| Типобезопасность | GetTyped[User](data, "user") |
| Частые запросы | Processor + PreParse |
| Большие файлы | Processor.ForeachFile |
| Недоверенный ввод | SecurityConfig() |
Что дальше
- Быстрый старт — начните за 5 минут
- Синтаксис путей — полное описание синтаксиса путей
- Примеры использования — больше практических примеров