json.Unmarshal
function accepts case-insensitive object key matchesFor example, the following program prints bar
, instead of foo
.
package main
import (
"encoding/json"
"fmt"
)
type T struct {
HTML string `json:"HTML"`
}
var s = `{"HTML": "foo", "html": "bar"}`
func main() {
var t T
if err := json.Unmarshal([]byte(s), &t); err != nil {
fmt.Println(err)
return
}
fmt.Println(t.HTML) // bar
}
The docs of the json.Unmarshal
function states "preferring an exact match but also accepting a case-insensitive match". So personally, I think this is a bug in the json.Unmarshal
function
implementation, but the Go core team don't think so.
The Go 101 project is hosted on Github. Welcome to improve Go 101 articles by submitting corrections for all kinds of mistakes, such as typos, grammar errors, wording inaccuracies, description flaws, code bugs and broken links.
If you would like to learn some Go details and facts every serveral days, please follow Go 101's official Twitter account @zigo_101.
json.Unmarshal
function accepts case-insensitive object key matches