jsonx

package
v2.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 28, 2026 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package jsonx provides helpers for json in/out operations

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrObjectExpected is returned when a JSON round-trip does not produce an object
	ErrObjectExpected = errors.New("json value is not an object")
	// ErrKeyRequired is returned when a JSON object key is empty
	ErrKeyRequired = errors.New("json key is required")
)
View Source
var Reflector = &jsonschema.Reflector{
	AllowAdditionalProperties:  false,
	RequiredFromJSONSchemaTags: true,
}

Reflector is the shared JSON schema reflector used by SchemaFrom and SchemaID.

Functions

func ApplyOverlay

func ApplyOverlay[T any](base T, overlay any) (T, error)

ApplyOverlay applies a JSON overlay to an existing typed value

func CloneRawMessage

func CloneRawMessage(raw json.RawMessage) json.RawMessage

CloneRawMessage copies a raw JSON document to avoid accidental aliasing

func Decode

func Decode[T any](raw json.RawMessage) (T, error)

Decode unmarshals a json.RawMessage into a typed value

func DecodeAnyOrNil

func DecodeAnyOrNil(raw json.RawMessage) any

DecodeAnyOrNil decodes raw JSON to an untyped value or returns nil on failure/empty input

func DecodeObjectKey

func DecodeObjectKey[T any](raw json.RawMessage, key string) (T, bool)

DecodeObjectKey decodes one top-level key of a raw JSON object into a typed value, reporting false when the document is not an object, the key is absent, or the value does not decode as T

func DeepMerge

func DeepMerge(base, patch json.RawMessage) (json.RawMessage, bool, error)

DeepMerge deep-merges patch into base and reports whether the document changed. Both arguments must be JSON objects. Returns the merged document and a boolean indicating whether the result differs from base

func EditObject

func EditObject(raw json.RawMessage, edit func(doc map[string]json.RawMessage) bool) json.RawMessage

EditObject decodes a raw JSON object, lets edit mutate its top-level keys, and re-marshals the result. edit reports whether it changed the document; undecodable input, unchanged documents, and re-marshal failures return the original document, making the edit best-effort

func InjectDefaults

func InjectDefaults(schema json.RawMessage, defaults map[string]any) (json.RawMessage, error)

InjectDefaults returns the schema document as raw JSON with stored values injected as "default" at every level of nesting, following $ref pointers into $defs recursively. Using jsonschema.Schema preserves the original property ordering on serialization.

func IsEmptyRawMessage

func IsEmptyRawMessage(raw json.RawMessage) bool

IsEmptyRawMessage reports whether a raw JSON message is empty or null

func MergeObjectMap

func MergeObjectMap(base json.RawMessage, patch map[string]json.RawMessage) (json.RawMessage, bool, error)

MergeObjectMap shallow-merges a raw JSON object with the supplied top-level patch map

func PropertyNames

func PropertyNames[T any]() []string

PropertyNames reflects a Go type and returns the top-level JSON property names from the generated JSON schema. Properties from embedded structs are promoted by the reflector and appear as top-level names.

func RoundTrip

func RoundTrip(input any, output any) error

RoundTrip marshals input to JSON and unmarshals it into output

func SchemaFrom

func SchemaFrom[T any]() json.RawMessage

SchemaFrom reflects a JSON schema from a Go type and returns it as raw JSON.

func SchemaID

func SchemaID(schema json.RawMessage) string

SchemaID extracts the definition key from a reflected JSON schema's $ref path.

func SetObjectKey

func SetObjectKey(base json.RawMessage, key string, value any) (json.RawMessage, bool, error)

SetObjectKey sets or replaces one top-level key in a raw JSON object

func Stringify

func Stringify(value any) string

Stringify renders an arbitrary decoded JSON value as its JSON string form for downstream text processing. Strings pass through unchanged; nil, empty slices, JSON null, and unmarshalable values render as the empty string

func ToMap

func ToMap(value any) (map[string]any, error)

ToMap converts an arbitrary value into a JSON object map

func ToRawMap

func ToRawMap(value any) (map[string]json.RawMessage, error)

ToRawMap converts an arbitrary value into a JSON object map of raw values.

func ToRawMessage

func ToRawMessage(value any) (json.RawMessage, error)

ToRawMessage converts an arbitrary value into a raw JSON document

func UnmarshalIfPresent

func UnmarshalIfPresent(raw json.RawMessage, output any) error

UnmarshalIfPresent unmarshals raw JSON when it is non-empty

func ValidateSchema

func ValidateSchema(schema any, document any) (*gojsonschema.Result, error)

ValidateSchema validates a JSON document against a JSON schema and returns the raw gojsonschema result for caller-specific error handling.

func ValidationErrorStrings

func ValidationErrorStrings(result *gojsonschema.Result) []string

ValidationErrorStrings converts schema validation errors into string messages.

Types

type PropertyDescriptor

type PropertyDescriptor struct {
	// Name is the JSON property key as it appears in the reflected schema.
	Name string
	// Description is the human-readable description extracted from the jsonschema description tag.
	Description string
}

PropertyDescriptor is a top-level JSON schema property with its name and description.

func PropertyDescriptors

func PropertyDescriptors[T any]() []PropertyDescriptor

PropertyDescriptors reflects a Go type and returns its top-level JSON properties with names and descriptions from the generated JSON schema. Properties from embedded structs are promoted by the reflector and appear as top-level entries.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL