sjson
sjson copied to clipboard
Set with empty json "-1" create an object
Hi,
I tried to do:
sjson.Set("", "-1", "bob")
I expecting ["bob"]
but i got {"-1":"bob"}
I think sjson.Set("", ":-1", "bob")
should return {"-1":"bob"}
and sjson.Set("", "-1", "bob")
should return ["bob"]
Example: https://play.golang.org/p/SVqFuZs0DXh
I was also wondering if this is the proper behavior or a bug. I was also expecting that -1 will create an array and not a map.
Right now that is proper behavior. A -1
is treated as an object key when the parent does not exist. Only when the parent is an existing array will it append the value.
For example, sjson.Set("[]", "-1", "bob")
results in ["bob"]
.
But, sjson.Set("", "-1", "bob")
results in {"-1":"bob"}
.
Just as sjson.Set("{}", "-1", "bob")
results in {"-1":"bob"}
.
I can see how this is a problem though. It would be super nice to just use -1
to append to an array and/or automatically create the array if it doesn't exist . Beside, -1
would be a very strange object key.
I don't have a problem with making this change.
as mentioned, use sjson.Set("[]", "-1", "bob")
. validating what kind of data/json you are manipulating should be your code's concern.
@jeremy-carbonne will you submit your work? https://github.com/jeremy-carbonne/sjson/tree/minus_one