Documentation ¶
Index ¶
- Constants
- Variables
- func ErrUnsupportedFootPositionType(node ast.Node) error
- func ErrUnsupportedHeadPositionType(node ast.Node) error
- func ErrUnsupportedLinePositionType(node ast.Node) error
- func FormatError(e error, colored, inclSource bool) string
- func IsInvalidAliasNameError(err error) bool
- func IsInvalidAnchorNameError(err error) bool
- func IsInvalidPathError(err error) bool
- func IsInvalidPathStringError(err error) bool
- func IsInvalidQueryError(err error) bool
- func IsInvalidTokenTypeError(err error) bool
- func IsNotFoundNodeError(err error) bool
- func JSONToYAML(bytes []byte) ([]byte, error)
- func Marshal(v interface{}) ([]byte, error)
- func MarshalContext(ctx context.Context, v interface{}, opts ...EncodeOption) ([]byte, error)
- func MarshalWithOptions(v interface{}, opts ...EncodeOption) ([]byte, error)
- func NodeToValue(node ast.Node, v interface{}, opts ...DecodeOption) error
- func RegisterCustomMarshaler[T any](marshaler func(T) ([]byte, error))
- func RegisterCustomUnmarshaler[T any](unmarshaler func(*T, []byte) error)
- func Unmarshal(data []byte, v interface{}) error
- func UnmarshalContext(ctx context.Context, data []byte, v interface{}, opts ...DecodeOption) error
- func UnmarshalWithOptions(data []byte, v interface{}, opts ...DecodeOption) error
- func ValueToNode(v interface{}, opts ...EncodeOption) (ast.Node, error)
- func YAMLToJSON(bytes []byte) ([]byte, error)
- type BytesMarshaler
- type BytesMarshalerContext
- type BytesUnmarshaler
- type BytesUnmarshalerContext
- type Comment
- type CommentMap
- type CommentPosition
- type DecodeOption
- func AllowDuplicateMapKey() DecodeOption
- func CommentToMap(cm CommentMap) DecodeOption
- func CustomUnmarshaler[T any](unmarshaler func(*T, []byte) error) DecodeOption
- func DisallowUnknownField() DecodeOption
- func RecursiveDir(isRecursive bool) DecodeOption
- func ReferenceDirs(dirs ...string) DecodeOption
- func ReferenceFiles(files ...string) DecodeOption
- func ReferenceReaders(readers ...io.Reader) DecodeOption
- func Strict() DecodeOption
- func UseJSONUnmarshaler() DecodeOption
- func UseOrderedMap() DecodeOption
- func Validator(v StructValidator) DecodeOption
- type Decoder
- type DuplicateKeyError
- type EncodeOption
- func CustomMarshaler[T any](marshaler func(T) ([]byte, error)) EncodeOption
- func Flow(isFlowStyle bool) EncodeOption
- func Indent(spaces int) EncodeOption
- func IndentSequence(indent bool) EncodeOption
- func JSON() EncodeOption
- func MarshalAnchor(callback func(*ast.AnchorNode, interface{}) error) EncodeOption
- func UseJSONMarshaler() EncodeOption
- func UseLiteralStyleIfMultiline(useLiteralStyleIfMultiline bool) EncodeOption
- func UseSingleQuote(sq bool) EncodeOption
- func WithComment(cm CommentMap) EncodeOption
- type Encoder
- func (e *Encoder) Close() error
- func (e *Encoder) Encode(v interface{}) error
- func (e *Encoder) EncodeContext(ctx context.Context, v interface{}) error
- func (e *Encoder) EncodeToNode(v interface{}) (ast.Node, error)
- func (e *Encoder) EncodeToNodeContext(ctx context.Context, v interface{}) (ast.Node, error)
- type FieldError
- type InterfaceMarshaler
- type InterfaceMarshalerContext
- type InterfaceUnmarshaler
- type InterfaceUnmarshalerContext
- type IsZeroer
- type MapItem
- type MapSlice
- type OverflowError
- type Path
- func (p *Path) AnnotateSource(source []byte, colored bool) ([]byte, error)
- func (p *Path) Filter(target, v interface{}) error
- func (p *Path) FilterFile(f *ast.File) (ast.Node, error)
- func (p *Path) FilterNode(node ast.Node) (ast.Node, error)
- func (p *Path) MergeFromFile(dst *ast.File, src *ast.File) error
- func (p *Path) MergeFromNode(dst *ast.File, src ast.Node) error
- func (p *Path) MergeFromReader(dst *ast.File, src io.Reader) error
- func (p *Path) Read(r io.Reader, v interface{}) error
- func (p *Path) ReadNode(r io.Reader) (ast.Node, error)
- func (p *Path) ReplaceWithFile(dst *ast.File, src *ast.File) error
- func (p *Path) ReplaceWithNode(dst *ast.File, node ast.Node) error
- func (p *Path) ReplaceWithReader(dst *ast.File, src io.Reader) error
- func (p *Path) String() string
- type PathBuilder
- type StructField
- type StructFieldMap
- type StructValidator
- type SyntaxError
- type TypeError
- type UnexpectedNodeTypeError
- type UnknownFieldError
Examples ¶
Constants ¶
const (
// DefaultIndentSpaces default number of space for indent
DefaultIndentSpaces = 2
)
const (
// StructTagName tag keyword for Marshal/Unmarshal
StructTagName = "yaml"
)
Variables ¶
var ( ErrInvalidQuery = errors.New("invalid query") ErrInvalidPath = errors.New("invalid path instance") ErrInvalidPathString = errors.New("invalid path string") ErrNotFoundNode = errors.New("node not found") ErrUnknownCommentPositionType = errors.New("unknown comment position type") ErrInvalidCommentMapValue = errors.New("invalid comment map value. it must be not nil value") ErrDecodeRequiredPointerType = errors.New("required pointer type value") ErrExceededMaxDepth = errors.New("exceeded max depth") )
Functions ¶
func ErrUnsupportedFootPositionType ¶ added in v1.10.0
func ErrUnsupportedHeadPositionType ¶ added in v1.9.2
func ErrUnsupportedLinePositionType ¶ added in v1.10.0
func FormatError ¶
FormatError is a utility function that takes advantage of the metadata stored in the errors returned by this package's parser.
If the second argument `colored` is true, the error message is colorized. If the third argument `inclSource` is true, the error message will contain snippets of the YAML source that was used.
func IsInvalidAliasNameError ¶ added in v1.8.7
IsInvalidAliasNameError whether err is ast.ErrInvalidAliasName or not.
func IsInvalidAnchorNameError ¶ added in v1.8.7
IsInvalidAnchorNameError whether err is ast.ErrInvalidAnchorName or not.
func IsInvalidPathError ¶ added in v1.8.7
IsInvalidPathError whether err is ErrInvalidPath or not.
func IsInvalidPathStringError ¶ added in v1.8.7
IsInvalidPathStringError whether err is ErrInvalidPathString or not.
func IsInvalidQueryError ¶ added in v1.8.7
IsInvalidQueryError whether err is ErrInvalidQuery or not.
func IsInvalidTokenTypeError ¶ added in v1.8.7
IsInvalidTokenTypeError whether err is ast.ErrInvalidTokenType or not.
func IsNotFoundNodeError ¶ added in v1.8.7
IsNotFoundNodeError whether err is ErrNotFoundNode or not.
func JSONToYAML ¶ added in v1.8.3
JSONToYAML convert JSON bytes to YAML.
func Marshal ¶
Marshal serializes the value provided into a YAML document. The structure of the generated document will reflect the structure of the value itself. Maps and pointers (to struct, string, int, etc) are accepted as the in value.
Struct fields are only marshaled if they are exported (have an upper case first letter), and are marshaled using the field name lowercased as the default key. Custom keys may be defined via the "yaml" name in the field tag: the content preceding the first comma is used as the key, and the following comma-separated options are used to tweak the marshaling process. Conflicting names result in a runtime error.
The field tag format accepted is:
`(...) yaml:"[<key>][,<flag1>[,<flag2>]]" (...)`
The following flags are currently supported:
omitempty Only include the field if it's not set to the zero value for the type or to empty slices or maps. Zero valued structs will be omitted if all their public fields are zero, unless they implement an IsZero method (see the IsZeroer interface type), in which case the field will be included if that method returns true. flow Marshal using a flow style (useful for structs, sequences and maps). inline Inline the field, which must be a struct or a map, causing all of its fields or keys to be processed as if they were part of the outer struct. For maps, keys must not conflict with the yaml keys of other struct fields. anchor Marshal with anchor. If want to define anchor name explicitly, use anchor=name style. Otherwise, if used 'anchor' name only, used the field name lowercased as the anchor name alias Marshal with alias. If want to define alias name explicitly, use alias=name style. Otherwise, If omitted alias name and the field type is pointer type, assigned anchor name automatically from same pointer address.
In addition, if the key is "-", the field is ignored.
For example:
type T struct { F int `yaml:"a,omitempty"` B int } yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" yaml.Marshal(&T{F: 1}) // Returns "a: 1\nb: 0\n"
Example ¶
var slow SlowMarshaler slow.A = "Hello slow poke" slow.B = 100 buf, err := yaml.Marshal(slow) if err != nil { panic(err.Error()) } fmt.Println(string(buf)) var fast FastMarshaler fast.A = "Hello speed demon" fast.B = 100 buf, err = yaml.Marshal(fast) if err != nil { panic(err.Error()) } fmt.Println(string(buf)) text := TextMarshalerContainer{ Field: 11, } buf, err = yaml.Marshal(text) if err != nil { panic(err.Error()) } fmt.Println(string(buf))
Output: tags: - slow-marshaler a: Hello slow poke b: 100 tags: - fast-marshaler a: Hello speed demon b: 100 field: 13
Example (ExplicitAnchorAlias) ¶
type T struct { A int B string } var v struct { C *T `yaml:"c,anchor=x"` D *T `yaml:"d,alias=x"` } v.C = &T{A: 1, B: "hello"} v.D = v.C bytes, err := yaml.Marshal(v) if err != nil { panic(err) } fmt.Println(string(bytes))
Output: c: &x a: 1 b: hello d: *x
Example (ImplicitAnchorAlias) ¶
type T struct { I int S string } var v struct { A *T `yaml:"a,anchor"` B *T `yaml:"b,anchor"` C *T `yaml:"c,alias"` D *T `yaml:"d,alias"` } v.A = &T{I: 1, S: "hello"} v.B = &T{I: 2, S: "world"} v.C = v.A // C has same pointer address to A v.D = v.B // D has same pointer address to B bytes, err := yaml.Marshal(v) if err != nil { panic(err) } fmt.Println(string(bytes))
Output: a: &a i: 1 s: hello b: &b i: 2 s: world c: *a d: *b
Example (Node) ¶
type T struct { Text ast.Node `yaml:"text"` } stringNode, err := yaml.ValueToNode("node example") if err != nil { panic(err) } bytes, err := yaml.Marshal(T{Text: stringNode}) if err != nil { panic(err) } fmt.Println(string(bytes))
Output: text: node example
func MarshalContext ¶ added in v1.9.0
func MarshalContext(ctx context.Context, v interface{}, opts ...EncodeOption) ([]byte, error)
MarshalContext serializes the value provided into a YAML document with context.Context and EncodeOptions.
func MarshalWithOptions ¶ added in v1.8.0
func MarshalWithOptions(v interface{}, opts ...EncodeOption) ([]byte, error)
MarshalWithOptions serializes the value provided into a YAML document with EncodeOptions.
func NodeToValue ¶ added in v1.9.0
func NodeToValue(node ast.Node, v interface{}, opts ...DecodeOption) error
NodeToValue converts node to the value pointed to by v.
Example ¶
f, err := parser.ParseBytes([]byte("text: node example"), 0) if err != nil { panic(err) } var v struct { Text string `yaml:"text"` } if err := yaml.NodeToValue(f.Docs[0].Body, &v); err != nil { panic(err) } fmt.Println(v.Text)
Output: node example
func RegisterCustomMarshaler ¶ added in v1.11.0
RegisterCustomMarshaler overrides any encoding process for the type specified in generics. If you want to switch the behavior for each encoder, use `CustomMarshaler` defined as EncodeOption.
NOTE: If type T implements MarshalYAML for pointer receiver, the type specified in RegisterCustomMarshaler must be *T. If RegisterCustomMarshaler and CustomMarshaler of EncodeOption are specified for the same type, the CustomMarshaler specified in EncodeOption takes precedence.
func RegisterCustomUnmarshaler ¶ added in v1.11.0
RegisterCustomUnmarshaler overrides any decoding process for the type specified in generics. If you want to switch the behavior for each decoder, use `CustomUnmarshaler` defined as DecodeOption.
NOTE: If RegisterCustomUnmarshaler and CustomUnmarshaler of DecodeOption are specified for the same type, the CustomUnmarshaler specified in DecodeOption takes precedence.
func Unmarshal ¶
Unmarshal decodes the first document found within the in byte slice and assigns decoded values into the out value.
Struct fields are only unmarshalled if they are exported (have an upper case first letter), and are unmarshalled using the field name lowercased as the default key. Custom keys may be defined via the "yaml" name in the field tag: the content preceding the first comma is used as the key, and the following comma-separated options are used to tweak the marshaling process (see Marshal). Conflicting names result in a runtime error.
For example:
type T struct { F int `yaml:"a,omitempty"` B int } var t T yaml.Unmarshal([]byte("a: 1\nb: 2"), &t)
See the documentation of Marshal for the format of tags and a list of supported tag options.
Example (JSONTags) ¶
yml := `--- foo: 1 bar: c ` var v struct { A int `json:"foo"` B string `json:"bar"` } if err := yaml.Unmarshal([]byte(yml), &v); err != nil { log.Fatal(err) } fmt.Println(v.A) fmt.Println(v.B)
Output: 1 c
Example (YAMLTags) ¶
yml := `--- foo: 1 bar: c A: 2 B: d ` var v struct { A int `yaml:"foo" json:"A"` B string `yaml:"bar" json:"B"` } if err := yaml.Unmarshal([]byte(yml), &v); err != nil { log.Fatal(err) } fmt.Println(v.A) fmt.Println(v.B)
Output: 1 c
func UnmarshalContext ¶ added in v1.9.0
func UnmarshalContext(ctx context.Context, data []byte, v interface{}, opts ...DecodeOption) error
UnmarshalContext decodes with context.Context and DecodeOptions.
func UnmarshalWithOptions ¶ added in v1.8.0
func UnmarshalWithOptions(data []byte, v interface{}, opts ...DecodeOption) error
UnmarshalWithOptions decodes with DecodeOptions the first document found within the in byte slice and assigns decoded values into the out value.
func ValueToNode ¶ added in v1.8.0
func ValueToNode(v interface{}, opts ...EncodeOption) (ast.Node, error)
ValueToNode convert from value to ast.Node.
func YAMLToJSON ¶ added in v1.8.3
YAMLToJSON convert YAML bytes to JSON.
Types ¶
type BytesMarshaler ¶
BytesMarshaler interface may be implemented by types to customize their behavior when being marshaled into a YAML document. The returned value is marshaled in place of the original value implementing Marshaler.
If an error is returned by MarshalYAML, the marshaling procedure stops and returns with the provided error.
type BytesMarshalerContext ¶ added in v1.8.4
BytesMarshalerContext interface use BytesMarshaler with context.Context.
type BytesUnmarshaler ¶
BytesUnmarshaler interface may be implemented by types to customize their behavior when being unmarshaled from a YAML document.
type BytesUnmarshalerContext ¶ added in v1.8.4
BytesUnmarshalerContext interface use BytesUnmarshaler with context.Context.
type Comment ¶ added in v1.9.2
type Comment struct { Texts []string Position CommentPosition }
Comment raw data for comment.
func FootComment ¶ added in v1.10.0
FootComment create a multiline comment for CommentMap.
func HeadComment ¶ added in v1.9.2
HeadComment create a multiline comment for CommentMap.
func LineComment ¶ added in v1.9.2
LineComment create a one-line comment for CommentMap.
type CommentMap ¶ added in v1.9.2
CommentMap map of the position of the comment and the comment information.
type CommentPosition ¶ added in v1.9.2
type CommentPosition int
CommentPosition type of the position for comment.
const ( CommentHeadPosition CommentPosition = CommentPosition(iota) CommentLinePosition CommentFootPosition )
func (CommentPosition) String ¶ added in v1.9.2
func (p CommentPosition) String() string
type DecodeOption ¶
DecodeOption functional option type for Decoder
func AllowDuplicateMapKey ¶ added in v1.14.0
func AllowDuplicateMapKey() DecodeOption
AllowDuplicateMapKey ignore syntax error when mapping keys that are duplicates.
func CommentToMap ¶ added in v1.9.3
func CommentToMap(cm CommentMap) DecodeOption
CommentToMap apply the position and content of comments in a YAML document to a CommentMap.
func CustomUnmarshaler ¶ added in v1.11.0
func CustomUnmarshaler[T any](unmarshaler func(*T, []byte) error) DecodeOption
CustomUnmarshaler overrides any decoding process for the type specified in generics.
NOTE: If RegisterCustomUnmarshaler and CustomUnmarshaler of DecodeOption are specified for the same type, the CustomUnmarshaler specified in DecodeOption takes precedence.
func DisallowUnknownField ¶ added in v1.1.3
func DisallowUnknownField() DecodeOption
DisallowUnknownField causes the Decoder to return an error when the destination is a struct and the input contains object keys which do not match any non-ignored, exported fields in the destination.
func RecursiveDir ¶
func RecursiveDir(isRecursive bool) DecodeOption
RecursiveDir search yaml file recursively from passed dirs by ReferenceDirs option
func ReferenceDirs ¶
func ReferenceDirs(dirs ...string) DecodeOption
ReferenceDirs pass to Decoder that reference to anchor defined by files under the passed dirs
func ReferenceFiles ¶
func ReferenceFiles(files ...string) DecodeOption
ReferenceFiles pass to Decoder that reference to anchor defined by passed files
func ReferenceReaders ¶
func ReferenceReaders(readers ...io.Reader) DecodeOption
ReferenceReaders pass to Decoder that reference to anchor defined by passed readers
func Strict ¶ added in v1.6.1
func Strict() DecodeOption
Strict enable DisallowUnknownField and DisallowDuplicateKey
func UseJSONUnmarshaler ¶ added in v1.8.3
func UseJSONUnmarshaler() DecodeOption
UseJSONUnmarshaler if neither `BytesUnmarshaler` nor `InterfaceUnmarshaler` is implemented and `UnmashalJSON([]byte)error` is implemented, convert the argument from `YAML` to `JSON` and then call it.
func UseOrderedMap ¶ added in v1.5.0
func UseOrderedMap() DecodeOption
UseOrderedMap can be interpreted as a map, and uses MapSlice ( ordered map ) aggressively if there is no type specification
func Validator ¶
func Validator(v StructValidator) DecodeOption
Validator set StructValidator instance to Decoder
type Decoder ¶
type Decoder struct {
// contains filtered or unexported fields
}
Decoder reads and decodes YAML values from an input stream.
func NewDecoder ¶
func NewDecoder(r io.Reader, opts ...DecodeOption) *Decoder
NewDecoder returns a new decoder that reads from r.
func (*Decoder) Decode ¶
Decode reads the next YAML-encoded value from its input and stores it in the value pointed to by v.
See the documentation for Unmarshal for details about the conversion of YAML into a Go value.
Example (DisallowUnknownField) ¶
var v struct { A string `yaml:"simple"` C string `yaml:"complicated"` } const src = `--- simple: string unknown: string ` err := yaml.NewDecoder(strings.NewReader(src), yaml.DisallowUnknownField()).Decode(&v) fmt.Printf("%v\n", err)
Output: [3:1] unknown field "unknown" 1 | --- 2 | simple: string > 3 | unknown: string ^
func (*Decoder) DecodeContext ¶ added in v1.8.4
DecodeContext reads the next YAML-encoded value from its input and stores it in the value pointed to by v with context.Context.
func (*Decoder) DecodeFromNode ¶ added in v1.9.0
DecodeFromNode decodes node into the value pointed to by v.
type DuplicateKeyError ¶ added in v1.14.1
type DuplicateKeyError = errors.DuplicateKeyError
type EncodeOption ¶
EncodeOption functional option type for Encoder
func CustomMarshaler ¶ added in v1.11.0
func CustomMarshaler[T any](marshaler func(T) ([]byte, error)) EncodeOption
CustomMarshaler overrides any encoding process for the type specified in generics.
NOTE: If type T implements MarshalYAML for pointer receiver, the type specified in CustomMarshaler must be *T. If RegisterCustomMarshaler and CustomMarshaler of EncodeOption are specified for the same type, the CustomMarshaler specified in EncodeOption takes precedence.
func IndentSequence ¶ added in v1.8.10
func IndentSequence(indent bool) EncodeOption
IndentSequence causes sequence values to be indented the same value as Indent
func MarshalAnchor ¶ added in v1.1.9
func MarshalAnchor(callback func(*ast.AnchorNode, interface{}) error) EncodeOption
MarshalAnchor call back if encoder find an anchor during encoding
func UseJSONMarshaler ¶ added in v1.8.3
func UseJSONMarshaler() EncodeOption
UseJSONMarshaler if neither `BytesMarshaler` nor `InterfaceMarshaler` nor `encoding.TextMarshaler` is implemented and `MarshalJSON()([]byte, error)` is implemented, call `MarshalJSON` to convert the returned `JSON` to `YAML` for processing.
func UseLiteralStyleIfMultiline ¶ added in v1.8.5
func UseLiteralStyleIfMultiline(useLiteralStyleIfMultiline bool) EncodeOption
UseLiteralStyleIfMultiline causes encoding multiline strings with a literal syntax, no matter what characters they include
func UseSingleQuote ¶ added in v1.9.5
func UseSingleQuote(sq bool) EncodeOption
UseSingleQuote determines if single or double quotes should be preferred for strings.
func WithComment ¶ added in v1.9.2
func WithComment(cm CommentMap) EncodeOption
WithComment add a comment using the location and text information given in the CommentMap.
type Encoder ¶
type Encoder struct {
// contains filtered or unexported fields
}
Encoder writes YAML values to an output stream.
func NewEncoder ¶
func NewEncoder(w io.Writer, opts ...EncodeOption) *Encoder
NewEncoder returns a new encoder that writes to w. The Encoder should be closed after use to flush all data to w.
func (*Encoder) Close ¶
Close closes the encoder by writing any remaining data. It does not write a stream terminating string "...".
func (*Encoder) Encode ¶
Encode writes the YAML encoding of v to the stream. If multiple items are encoded to the stream, the second and subsequent document will be preceded with a "---" document separator, but the first will not.
See the documentation for Marshal for details about the conversion of Go values to YAML.
func (*Encoder) EncodeContext ¶ added in v1.8.4
EncodeContext writes the YAML encoding of v to the stream with context.Context.
func (*Encoder) EncodeToNode ¶ added in v1.8.0
EncodeToNode convert v to ast.Node.
type FieldError ¶
type FieldError interface {
StructField() string
}
FieldError need to implement StructField method only ( see https://pkg.go.dev/github.com/go-playground/validator/v10#FieldError )
type InterfaceMarshaler ¶
type InterfaceMarshaler interface {
MarshalYAML() (interface{}, error)
}
InterfaceMarshaler interface has MarshalYAML compatible with github.com/go-yaml/yaml package.
type InterfaceMarshalerContext ¶ added in v1.8.4
InterfaceMarshalerContext interface use InterfaceMarshaler with context.Context.
type InterfaceUnmarshaler ¶
InterfaceUnmarshaler interface has UnmarshalYAML compatible with github.com/go-yaml/yaml package.
type InterfaceUnmarshalerContext ¶ added in v1.8.4
type InterfaceUnmarshalerContext interface {
UnmarshalYAML(context.Context, func(interface{}) error) error
}
InterfaceUnmarshalerContext interface use InterfaceUnmarshaler with context.Context.
type IsZeroer ¶
type IsZeroer interface {
IsZero() bool
}
IsZeroer is used to check whether an object is zero to determine whether it should be omitted when marshaling with the omitempty flag. One notable implementation is time.Time.
type MapSlice ¶
type MapSlice []MapItem
MapSlice encodes and decodes as a YAML map. The order of keys is preserved when encoding and decoding.
type OverflowError ¶ added in v1.14.1
type OverflowError = errors.OverflowError
type Path ¶ added in v1.7.0
type Path struct {
// contains filtered or unexported fields
}
Path represent YAMLPath ( like a JSONPath ).
func PathString ¶ added in v1.7.0
PathString create Path from string
YAMLPath rule $ : the root object/element . : child operator .. : recursive descent [num] : object/element of array by number [*] : all objects/elements for array.
If you want to use reserved characters such as `.` and `*` as a key name, enclose them in single quotation as follows ( $.foo.'bar.baz-*'.hoge ). If you want to use a single quote with reserved characters, escape it with `\` ( $.foo.'bar.baz\'s value'.hoge ).
Example ¶
yml := ` store: book: - author: john price: 10 - author: ken price: 12 bicycle: color: red price: 19.95 ` path, err := yaml.PathString("$.store.book[*].author") if err != nil { log.Fatal(err) } var authors []string if err := path.Read(strings.NewReader(yml), &authors); err != nil { log.Fatal(err) } fmt.Println(authors)
Output: [john ken]
func (*Path) AnnotateSource ¶ added in v1.8.0
AnnotateSource add annotation to passed source ( see section 5.1 in README.md ).
Example ¶
yml := ` a: 1 b: "hello" ` var v struct { A int B string } if err := yaml.Unmarshal([]byte(yml), &v); err != nil { panic(err) } if v.A != 2 { // output error with YAML source path, err := yaml.PathString("$.a") if err != nil { log.Fatal(err) } source, err := path.AnnotateSource([]byte(yml), false) if err != nil { log.Fatal(err) } fmt.Printf("a value expected 2 but actual %d:\n%s\n", v.A, string(source)) }
Output: a value expected 2 but actual 1: > 2 | a: 1 ^ 3 | b: "hello"
Example (WithComment) ¶
yml := ` # This is my document doc: # This comment should be line 3 map: # And below should be line 5 - value1 - value2 other: value3 ` path, err := yaml.PathString("$.doc.map[0]") if err != nil { log.Fatal(err) } msg, err := path.AnnotateSource([]byte(yml), false) if err != nil { log.Fatal(err) } fmt.Println(string(msg))
Output: 4 | # This comment should be line 3 5 | map: 6 | # And below should be line 5 > 7 | - value1 ^ 8 | - value2 9 | other: value3
func (*Path) FilterFile ¶ added in v1.7.0
FilterFile filter from ast.File by YAMLPath.
func (*Path) FilterNode ¶ added in v1.7.0
FilterNode filter from node by YAMLPath.
func (*Path) MergeFromFile ¶ added in v1.8.0
MergeFromFile merge ast.File into ast.File.
func (*Path) MergeFromNode ¶ added in v1.8.0
MergeFromNode merge ast.Node into ast.File.
func (*Path) MergeFromReader ¶ added in v1.8.0
MergeFromReader merge YAML text into ast.File.
func (*Path) ReplaceWithFile ¶ added in v1.8.0
ReplaceWithFile replace ast.File with ast.File.
func (*Path) ReplaceWithNode ¶ added in v1.8.0
ReplaceNode replace ast.File with ast.Node.
func (*Path) ReplaceWithReader ¶ added in v1.8.0
ReplaceWithReader replace ast.File with io.Reader.
type PathBuilder ¶ added in v1.7.0
type PathBuilder struct {
// contains filtered or unexported fields
}
PathBuilder represent builder for YAMLPath.
func (*PathBuilder) Build ¶ added in v1.7.0
func (b *PathBuilder) Build() *Path
Build build YAMLPath.
func (*PathBuilder) Child ¶ added in v1.7.0
func (b *PathBuilder) Child(name string) *PathBuilder
Child add '.name' to current path.
func (*PathBuilder) Index ¶ added in v1.7.0
func (b *PathBuilder) Index(idx uint) *PathBuilder
Index add '[idx]' to current path.
func (*PathBuilder) IndexAll ¶ added in v1.7.0
func (b *PathBuilder) IndexAll() *PathBuilder
IndexAll add '[*]' to current path.
func (*PathBuilder) Recursive ¶ added in v1.7.0
func (b *PathBuilder) Recursive(selector string) *PathBuilder
Recursive add '..selector' to current path.
func (*PathBuilder) Root ¶ added in v1.7.0
func (b *PathBuilder) Root() *PathBuilder
Root add '$' to current path.
type StructField ¶
type StructField struct { FieldName string RenderName string AnchorName string AliasName string IsAutoAnchor bool IsAutoAlias bool IsOmitEmpty bool IsFlow bool IsInline bool }
StructField information for each the field in structure
type StructFieldMap ¶
type StructFieldMap map[string]*StructField
type StructValidator ¶
type StructValidator interface {
Struct(interface{}) error
}
StructValidator need to implement Struct method only ( see https://pkg.go.dev/github.com/go-playground/validator/v10#Validate.Struct )
type SyntaxError ¶ added in v1.14.1
type SyntaxError = errors.SyntaxError
type UnexpectedNodeTypeError ¶ added in v1.14.1
type UnexpectedNodeTypeError = errors.UnexpectedNodeTypeError
type UnknownFieldError ¶ added in v1.14.1
type UnknownFieldError = errors.UnknownFieldError