回答編集履歴

2

コード例追加

2018/01/17 04:39

投稿

nobonobo
nobonobo

スコア3367

test CHANGED
@@ -27,3 +27,63 @@
27
27
 
28
28
 
29
29
  つまり `errors struct{` と書いてるところは `Errors []struct{` になります。
30
+
31
+
32
+
33
+ 追記2:
34
+
35
+
36
+
37
+ [https://play.golang.org/p/RKwUmzQatl3](https://play.golang.org/p/RKwUmzQatl3)
38
+
39
+ ```go
40
+
41
+ package main
42
+
43
+
44
+
45
+ import (
46
+
47
+ "encoding/json"
48
+
49
+ "fmt"
50
+
51
+ "log"
52
+
53
+ )
54
+
55
+
56
+
57
+ const resp = `{"errors":[{"code":89,"message":"Invalid or expired token."}]}`
58
+
59
+
60
+
61
+ type Error struct {
62
+
63
+ Errors []struct {
64
+
65
+ Code int `json:"code"`
66
+
67
+ Message string `json:"message"`
68
+
69
+ } `json:"errors"`
70
+
71
+ }
72
+
73
+
74
+
75
+ func main() {
76
+
77
+ var v Error
78
+
79
+ if err := json.Unmarshal([]byte(resp), &v); err != nil {
80
+
81
+ log.Fatalln(err)
82
+
83
+ }
84
+
85
+ fmt.Println(v)
86
+
87
+ }
88
+
89
+ ```

1

コメントをうけて追記

2018/01/17 04:39

投稿

nobonobo
nobonobo

スコア3367

test CHANGED
@@ -7,3 +7,23 @@
7
7
  ひとつは構造体のフィールド名は大文字で始まっていないとjsonのデコード、エンコード対象になりません。
8
8
 
9
9
  もう一つはerrorsはアレイ型なのでGo側の定義はスライスでなくてはなりません。
10
+
11
+
12
+
13
+ 追記:
14
+
15
+
16
+
17
+ - Go側のerrorsの頭文字が小文字なのでNGです。
18
+
19
+ - Go側のCodeの型がstringだと数値を受け取れません。
20
+
21
+
22
+
23
+ jsonのerrosは`"errors":[...]` こう書かれていますのでこれはjsonの配列です。
24
+
25
+ goの該当する型はスライスなのでスライス型を書く必要があります。
26
+
27
+
28
+
29
+ つまり `errors struct{` と書いてるところは `Errors []struct{` になります。