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.

Reply via email to