Movatterモバイル変換


[0]ホーム

URL:


jsonx

package
v1.92.2Latest Latest
Warning

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

Go to latest
Published: Dec 10, 2025 License:BSD-3-ClauseImports:5Imported by:0

Details

Repository

github.com/tailscale/tailscale

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.

Seehttps://go.dev/issues/71497

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.

Source Files

View all Source files

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f orF : Jump to
y orY : Canonical URL
go.dev uses cookies from Google to deliver and enhance the quality of its services and to analyze traffic.Learn more.

[8]ページ先頭

©2009-2025 Movatter.jp