Golang: simple map operations
Hi there, today we'd like to introduce you a package which will help you to deal some maps in a json path
way.
Let's assume you have a response from some service:
var document map[string]interface{}
err := json.Unmarshal(someCrazyResponse, &document)
fmt.Println(document)
and your document
map is
map[string]interface{}{
"one": []map[string]interface{}{
{
"two": []map[string]interface{}{
{"three": "got three"},
{"four": "got four"},
},
},
{
"two": []map[string]interface{}{
{"five": "got five"},
{"six": "got six"},
},
},
{
"two": []map[string]interface{}{
{"seven": "got seven"},
{"eight": "got eight"},
},
},
{
"three": []map[string]interface{}{
{"four": map[string]interface{}{
"five": "six",
}},
{"seven": map[string]interface{}{
"eight": "ten",
}},
},
},
},
}
You need to extract a property located in one[2].two[1].eight
which is currently ten
In golang it's a quite long string:
myVar := document["one"].([]map[string]interface{})[2]["two"].([]map[string]interface{})[1]["eight"]
It also can panic because in some of these documents there is no such property one[3].two
The package
So, we have developed a go-json-map package.
Using it you can:
-
get a property
myVar, err := GetProperty(document, "one[2].two[1].eight")
-
create some property which does not exist in a document
err := CreateProperty(document, "path.which.does.not.exist", "some value") err := CreateProperty(document, "path/which/does/not/exist/separated/using/slashes/", "some value", "/")
-
update missing or existing property
err := UpdateProperty(document, "path.which.should.be.updated", "some value") err := UpdateProperty(document, "path/which/does/not/exist/separated/using/slashes/", "some value", "/") err := UpdateProperty(document, "one[2].two[1].eight", "eleven") err := UpdateProperty(document, "one[3].three[2].four", []int{1,2,3,4})
-
delete a property
err := DeleteProperty(document, "one[3].three[1].seven.eight")
Conclusion
This package allows you to work with maps a bit easier :D
Links:
Subscribe to blog.chib.me
Get the latest posts delivered right to your inbox