@@ -718,10 +718,11 @@ func (rn *RNode) MustString() string {
718718
719719// Content returns Node Content field.
720720func (rn * RNode ) Content () []* yaml.Node {
721- if yNode := rn .YNode (); yNode != nil {
722- return yNode .Content
721+ yNode := rn .YNode ()
722+ if yNode == nil {
723+ return nil
723724 }
724- return nil
725+ return yNode . Content
725726}
726727
727728// Fields returns the list of field names for a MappingNode.
@@ -756,17 +757,18 @@ func (rn *RNode) FieldRNodes() ([]*RNode, error) {
756757// Field returns a fieldName, fieldValue pair for MappingNodes.
757758// Returns nil for non-MappingNodes.
758759func (rn * RNode ) Field (field string ) * MapNode {
759- if yNode := rn .YNode (); yNode != nil {
760- if yNode .Kind != yaml .MappingNode {
761- return nil
762- }
763- var result * MapNode
764- visitMappingNodeFields (rn .Content (), func (key , value * yaml.Node ) {
765- result = & MapNode {Key : NewRNode (key ), Value : NewRNode (value )}
766- }, field )
767- return result
760+ yNode := rn .YNode ()
761+ if yNode == nil {
762+ return nil
768763 }
769- return nil
764+ if yNode .Kind != yaml .MappingNode {
765+ return nil
766+ }
767+ var result * MapNode
768+ visitMappingNodeFields (rn .Content (), func (key , value * yaml.Node ) {
769+ result = & MapNode {Key : NewRNode (key ), Value : NewRNode (value )}
770+ }, field )
771+ return result
770772}
771773
772774// VisitFields calls fn for each field in the RNode.
@@ -895,34 +897,36 @@ func (rn *RNode) ElementValuesList(keys []string) ([][]string, error) {
895897// Element returns the element in the list which contains the field matching the value.
896898// Returns nil for non-SequenceNodes or if no Element matches.
897899func (rn * RNode ) Element (key , value string ) * RNode {
898- if yNode := rn .YNode (); yNode != nil {
899- if yNode .Kind != yaml .SequenceNode {
900- return nil
901- }
902- elem , err := rn .Pipe (MatchElement (key , value ))
903- if err != nil {
904- return nil
905- }
906- return elem
900+ yNode := rn .YNode ()
901+ if yNode == nil {
902+ return nil
907903 }
908- return nil
904+ if yNode .Kind != yaml .SequenceNode {
905+ return nil
906+ }
907+ elem , err := rn .Pipe (MatchElement (key , value ))
908+ if err != nil {
909+ return nil
910+ }
911+ return elem
909912}
910913
911914// ElementList returns the element in the list in which all fields keys[i] matches all
912915// corresponding values[i].
913916// Returns nil for non-SequenceNodes or if no Element matches.
914917func (rn * RNode ) ElementList (keys []string , values []string ) * RNode {
915- if yNode := rn .YNode (); yNode != nil {
916- if yNode .Kind != yaml .SequenceNode {
917- return nil
918- }
919- elem , err := rn .Pipe (MatchElementList (keys , values ))
920- if err != nil {
921- return nil
922- }
923- return elem
918+ yNode := rn .YNode ()
919+ if yNode == nil {
920+ return nil
924921 }
925- return nil
922+ if yNode .Kind != yaml .SequenceNode {
923+ return nil
924+ }
925+ elem , err := rn .Pipe (MatchElementList (keys , values ))
926+ if err != nil {
927+ return nil
928+ }
929+ return elem
926930}
927931
928932// VisitElements calls fn for each element in a SequenceNode.
@@ -969,27 +973,30 @@ func (rn *RNode) GetAssociativeKey() string {
969973
970974// MarshalJSON creates a byte slice from the RNode.
971975func (rn * RNode ) MarshalJSON () ([]byte , error ) {
972- if yNode := rn .YNode (); yNode != nil {
973- s , err := rn .String ()
974- if err != nil {
975- return nil , err
976- }
976+ yNode := rn .YNode ()
977+ if yNode == nil {
978+ return []byte ("null" ), nil
979+ }
977980
978- if yNode .Kind == SequenceNode {
979- var a []interface {}
980- if err := Unmarshal ([]byte (s ), & a ); err != nil {
981- return nil , err
982- }
983- return json .Marshal (a )
984- }
981+ s , err := rn .String ()
982+ if err != nil {
983+ return nil , err
984+ }
985985
986- m := map [string ]interface {}{}
987- if err := Unmarshal ([]byte (s ), & m ); err != nil {
986+ if yNode .Kind == SequenceNode {
987+ var a []interface {}
988+ if err := Unmarshal ([]byte (s ), & a ); err != nil {
988989 return nil , err
989990 }
990- return json .Marshal (m )
991+ return json .Marshal (a )
992+ }
993+
994+ m := map [string ]interface {}{}
995+ if err := Unmarshal ([]byte (s ), & m ); err != nil {
996+ return nil , err
991997 }
992- return json .Marshal (nil )
998+
999+ return json .Marshal (m )
9931000}
9941001
9951002// UnmarshalJSON overwrites this RNode with data from []byte.
0 commit comments