回答編集履歴

1

改善例追記

2022/08/14 12:32

投稿

nobonobo
nobonobo

スコア3367

test CHANGED
@@ -2,3 +2,43 @@
2
2
  コード例に記述した`map[int]T`では受け取れません。`[]T`で受け取りましょう。
3
3
  JSの世界ではObjectとArrayの差がインデックスが整数かどうかで似た扱いができちゃうのに対し、
4
4
  GoでのSliceとMapは全く異なる扱いです。
5
+
6
+ あと例示のJSONはJSONの規約とあっていないところがありました!
7
+
8
+ ### 改善例:
9
+ https://go.dev/play/p/UNnz01Yk9eq
10
+ ```go
11
+ package main
12
+
13
+ import (
14
+ "encoding/json"
15
+ "fmt"
16
+ )
17
+
18
+ const s = `
19
+ {
20
+ "body":{
21
+ "user_id":"3",
22
+ "expectations":[
23
+ {"time":"1","input_number_1":"1","input_number_2":"2","input_number_3":"3","input_number_4":"4","input_number_5":"5","input_number_6":"6"},
24
+ {"time":"2","input_number_1":"1","input_number_2":"2","input_number_3":"3","input_number_4":"4","input_number_5":"5","input_number_6":"6"}
25
+ ]
26
+ }
27
+ }
28
+ `
29
+
30
+ type A構造体名 struct {
31
+ Body struct {
32
+ UserID string `json:"user_id"`
33
+ Expectations []map[string]string `json:"expectations"` // ※可変長です。UI的には行追加ボタンを押して何行でも入力できるイメージ
34
+ } `json:"body"`
35
+ }
36
+
37
+ func main() {
38
+ var v A構造体名
39
+ if err := json.Unmarshal([]byte(s), &v); err != nil {
40
+ panic(err)
41
+ }
42
+ fmt.Println(v.Body.Expectations)
43
+ }
44
+ ```