@@ -22,13 +22,13 @@ func (dec *jsonDecoder) Init(reader io.Reader) {
22
22
23
23
func (dec * jsonDecoder ) Decode (rootYamlNode * yaml.Node ) error {
24
24
25
- var dataBucket interface {}
25
+ var dataBucket orderedMap
26
26
log .Debug ("going to decode" )
27
27
err := dec .decoder .Decode (& dataBucket )
28
28
if err != nil {
29
29
return err
30
30
}
31
- node , err := dec .convertToYamlNode (dataBucket )
31
+ node , err := dec .convertToYamlNode (& dataBucket )
32
32
33
33
if err != nil {
34
34
return err
@@ -38,39 +38,36 @@ func (dec *jsonDecoder) Decode(rootYamlNode *yaml.Node) error {
38
38
return nil
39
39
}
40
40
41
- func (dec * jsonDecoder ) convertToYamlNode (data interface {} ) (* yaml.Node , error ) {
42
- switch data := data .( type ) {
43
- case nil :
44
- return createScalarNode ( nil , "null" ), nil
45
- case float64 , float32 :
46
- // json decoder returns ints as float.
47
- return parseSnippet ( fmt . Sprintf ( "%v" , data ))
48
- case int , int64 , int32 , string , bool :
49
- return createScalarNode ( data , fmt . Sprintf ( "%v" , data )), nil
50
- case map [ string ] interface {}:
51
- return dec . parseMap ( data )
52
- case [] interface {}:
53
- return dec . parseArray ( data )
54
- default :
55
- return nil , fmt . Errorf ( "unrecognised type :(" )
41
+ func (dec * jsonDecoder ) convertToYamlNode (data * orderedMap ) (* yaml.Node , error ) {
42
+ if data . kv == nil {
43
+ switch rawData := data . altVal .( type ) {
44
+ case nil :
45
+ return createScalarNode ( nil , "null" ), nil
46
+ case float64 , float32 :
47
+ // json decoder returns ints as float.
48
+ return parseSnippet ( fmt . Sprintf ( "%v" , rawData ))
49
+ case int , int64 , int32 , string , bool :
50
+ return createScalarNode ( rawData , fmt . Sprintf ( "%v" , rawData )), nil
51
+ case [] * orderedMap :
52
+ return dec . parseArray ( rawData )
53
+ default :
54
+ return nil , fmt . Errorf ( "unrecognised type :( %v" , rawData )
55
+ }
56
56
}
57
- }
58
-
59
- func (dec * jsonDecoder ) parseMap (dataMap map [string ]interface {}) (* yaml.Node , error ) {
60
57
61
58
var yamlMap = & yaml.Node {Kind : yaml .MappingNode }
62
-
63
- for key , value := range dataMap {
64
- yamlValue , err := dec .convertToYamlNode (value )
59
+ for _ , keyValuePair := range data .kv {
60
+ yamlValue , err := dec .convertToYamlNode (& keyValuePair .V )
65
61
if err != nil {
66
62
return nil , err
67
63
}
68
- yamlMap .Content = append (yamlMap .Content , createScalarNode (key , fmt . Sprintf ( "%v" , key ) ), yamlValue )
64
+ yamlMap .Content = append (yamlMap .Content , createScalarNode (keyValuePair . K , keyValuePair . K ), yamlValue )
69
65
}
70
66
return yamlMap , nil
67
+
71
68
}
72
69
73
- func (dec * jsonDecoder ) parseArray (dataArray []interface {} ) (* yaml.Node , error ) {
70
+ func (dec * jsonDecoder ) parseArray (dataArray []* orderedMap ) (* yaml.Node , error ) {
74
71
75
72
var yamlMap = & yaml.Node {Kind : yaml .SequenceNode }
76
73
0 commit comments