jsonx
packageThis package is not in the latest version of its module.
Details
Validgo.mod file
The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go.
Redistributable license
Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed.
Tagged version
Modules with tagged versions give importers more predictable builds.
Stable version
When a project reaches major version v1 it is considered stable.
- Learn more about best practices
Repository
Links
Documentation¶
Overview¶
Package jsonx contains helper types and functionality to use withgithub.com/go-json-experiment/json, which is positioned to bemerged into the Go standard library asencoding/json/v2.
Index¶
Constants¶
This section is empty.
Variables¶
This section is empty.
Functions¶
funcMakeInterfaceCoders¶
func MakeInterfaceCoders[Tany](valuesByName map[string]T) (c struct {Marshal func(*jsontext.Encoder, *T)errorUnmarshal func(*jsontext.Decoder, *T)error})
MakeInterfaceCoders constructs a pair of marshal and unmarshal functionsto serialize a Go interface type T. A bijective mapping for the setof concrete types that implement T is provided,where the key is a stable type name to use in the JSON representation,while the value is any value of a concrete type that implements T.By convention, only the zero value of concrete types is passed.
The JSON representation for a dynamic value is a JSON objectwith a single member, where the member name is the type name,and the value is the JSON representation for the Go value.For example, the JSON serialization for a concrete type named Foowould be {"Foo": ...}, where ... is the JSON representationof the concrete value of the Foo type.
Example instantiation:
// Interface is a union type implemented by [FooType] and [BarType].type Interface interface { ... }var interfaceCoders = MakeInterfaceCoders(map[string]Interface{"FooType": FooType{},"BarType": (*BarType)(nil),})The pair of Marshal and Unmarshal functions can be used with thejsonpackage with either type-specified or caller-specified serialization.The result of this constructor is usually stored into a global variable.
Example usage with type-specified serialization:
// InterfaceWrapper is a concrete type that wraps [Interface].// It extends [Interface] to implement// [json.MarshalerTo] and [json.UnmarshalerFrom].type InterfaceWrapper struct{ Interface }func (w InterfaceWrapper) MarshalJSONTo(enc *jsontext.Encoder) error {return interfaceCoders.Marshal(enc, &w.Interface)}func (w *InterfaceWrapper) UnmarshalJSONFrom(dec *jsontext.Decoder) error {return interfaceCoders.Unmarshal(dec, &w.Interface)}Example usage with caller-specified serialization:
var opts json.Options = json.JoinOptions(json.WithMarshalers(json.MarshalToFunc(interfaceCoders.Marshal)),json.WithUnmarshalers(json.UnmarshalFromFunc(interfaceCoders.Unmarshal)),)var v Interface... := json.Marshal(v, opts)... := json.Unmarshal(&v, opts)
The function panics if T is not a named interface kind,or if valuesByName contains distinct entries with the same concrete type.
Types¶
This section is empty.