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.