allow Set function to set a value even if no value previously existed
diff --git a/pointer.go b/pointer.go
index 386bcec..7faf5d7 100644
--- a/pointer.go
+++ b/pointer.go
@@ -133,6 +133,8 @@
} else if isLastToken && i.mode =="DEL" {
delete(v,decodedToken)
}
+ } else if (isLastToken && i.mode == "SET") {
+ v[decodedToken] = i.setInValue
} else {
i.outError = fmt.Errorf("Object has no key '%s'", decodedToken)
i.getOutKind = reflect.Map
diff --git a/pointer_test.go b/pointer_test.go
index ce5b47e..612f76e 100644
--- a/pointer_test.go
+++ b/pointer_test.go
@@ -246,6 +246,32 @@
}
+func TestSetEmptyNode(t *testing.T) {
+
+ jsonText := `{}`
+
+ var jsonDocument interface{}
+ json.Unmarshal([]byte(jsonText), &jsonDocument)
+
+ in := "/a"
+
+ p, err := NewJsonPointer(in)
+ if err != nil {
+ t.Errorf("NewJsonPointer(%v) error %v", in, err.Error())
+ }
+
+ _, err = p.Set(jsonDocument, 999)
+ if err != nil {
+ t.Errorf("Set(%v) error %v", in, err.Error())
+ }
+
+ firstNode := jsonDocument.(map[string]interface{})
+ target := firstNode["a"].(int)
+ if target != 999 {
+ t.Errorf("Set(%s) failed", in)
+ }
+}
+
func TestDelObject(t *testing.T) {
jsonText := `{
"a":["apple sauce", "ketchup", "soy sauce"],