Signed-off-by: zwwhdls <zwwhdls@hotmail.com>
pull/7185/head
zwwhdls 6 years ago
parent 0ca95341c1
commit 10c22b4055

@ -281,8 +281,15 @@ func (t *parser) listItem(list []interface{}, i int) ([]interface{}, error) {
if err != nil { if err != nil {
return list, fmt.Errorf("error parsing index: %s", err) return list, fmt.Errorf("error parsing index: %s", err)
} }
var crtList []interface{}
if len(list) > i {
// If nested list already exists, take the value of list to next cycle.
crtList = list[i].([]interface{})
} else {
crtList = list
}
// Now we need to get the value after the ]. // Now we need to get the value after the ].
list2, err := t.listItem(list, i) list2, err := t.listItem(crtList, i)
return setIndex(list, i, list2), err return setIndex(list, i, list2), err
case last == '.': case last == '.':
// We have a nested object. Send to t.key // We have a nested object. Send to t.key

@ -388,7 +388,7 @@ func TestParseInto(t *testing.T) {
"inner2": "value2", "inner2": "value2",
}, },
} }
input := "outer.inner1=value1,outer.inner3=value3,outer.inner4=4" input := "outer.inner1=value1,outer.inner3=value3,outer.inner4=4,listOuter[0][0].type=listValue"
expect := map[string]interface{}{ expect := map[string]interface{}{
"outer": map[string]interface{}{ "outer": map[string]interface{}{
"inner1": "value1", "inner1": "value1",
@ -396,12 +396,22 @@ func TestParseInto(t *testing.T) {
"inner3": "value3", "inner3": "value3",
"inner4": 4, "inner4": 4,
}, },
"listOuter": [][]interface{}{{map[string]string{
"type": "listValue",
"status": "alive",
}},
},
} }
if err := ParseInto(input, got); err != nil { if err := ParseInto(input, got); err != nil {
t.Fatal(err) t.Fatal(err)
} }
input2 := "listOuter[0][0].status=alive"
if err := ParseInto(input2, got); err != nil {
t.Fatal(err)
}
y1, err := yaml.Marshal(expect) y1, err := yaml.Marshal(expect)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)

Loading…
Cancel
Save