Ah, I see what's going on: Go is mapping the "qux" field to the Qux struct arg just because they're case-insensitively equal. Go's totally ignoring my invalid struct tag.
D'oh, I was totally holding it wrong. Thanks everyone! :-) On Wed, 29 Jan 2020 at 08:12, Mark Hansen <m...@markhansen.co.nz> wrote: > Ah, thanks! Thought I might be holding it wrong. > > Still though, isn’t it strange that the extra space works if you don’t > have the dot in the key? > > > > On Wed, 29 Jan 2020 at 00:59, Lutz Horn <lutz.h...@outlook.de> wrote: > >> Remove the blank in ``json: "baz.bar"` and make it `json:"baz.bar"`. This >> works: https://play.golang.com/p/i9SURYgGO66 >> >> ________________________________________ >> Von: golang-nuts@googlegroups.com <golang-nuts@googlegroups.com> im >> Auftrag von m...@markhansen.co.nz <m...@markhansen.co.nz> >> Gesendet: Dienstag, 28. Januar 2020 12:14 >> An: golang-nuts >> Betreff: [go-nuts] JSON: Having trouble parsing map keys with dots like >> {"foo.bar":"baz"} >> >> Hi folks, for background, I'm trying to read the Kaiterra API< >> https://www.kaiterra.com/dev/#overview> using encoding/json, which has >> JSON values like this: >> >> >> {"id":"00000000-0001-0001-0000-00007e57c0de","info.aqi":{"ts":"2018-03-26T08:53:20Z","data":{"pm10":120,"pm25":214}}} >> >> I'm having trouble parsing the "info.aqi" field using encoding/json. I >> set the "info.aqi" field as a struct tag `json: "info.aqi"`, but the struct >> is just empty after parsing. >> >> It seems more likely I'm holding it wrong, but I'm wondering if perhaps >> this is a bug in Go's JSON parsing? >> >> I thought I'd make a minimal repro test, which fails: >> >> package main >> >> import ( >> "encoding/json" >> "strings" >> "testing" >> ) >> >> type Foo struct { >> BazBar string `json: "baz.bar"` >> Qux string `json: "qux"` >> } >> >> func TestDotKeyJsonParsing(t *testing.T) { >> f := &Foo{} >> d := json.NewDecoder(strings.NewReader(`{"baz.bar": "hello", "qux": >> "hi"}`)) >> err := d.Decode(f) >> if err != nil { >> t.Fatalf("json decoding failed: %v", err) >> } >> if f.Qux != "hi" { >> t.Fatalf("Expected f.Qux to be hi") >> } >> >> if f.BazBar != "hello" { >> t.Errorf("wanted: hello, got: %q", f.BazBar) >> } >> } >> >> And the Qux field passes fine, but the BazBar field is not set, so the >> test fails there: >> --- FAIL: TestDotKeyJsonParsing (0.00s) >> /Users/mark/projects/godot/dot_test.go:26: wanted: hello, got: "" >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts+unsubscr...@googlegroups.com<mailto: >> golang-nuts+unsubscr...@googlegroups.com>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/539f857c-d96a-45af-9a74-c328753bd12d%40googlegroups.com >> < >> https://groups.google.com/d/msgid/golang-nuts/539f857c-d96a-45af-9a74-c328753bd12d%40googlegroups.com?utm_medium=email&utm_source=footer >> >. >> > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAM07o6TiccrXvLCTeDk%3DWS5akcBZ32LiFmDW95gfV4PAmgnLQQ%40mail.gmail.com.