英文:
make a map with different data types in go for making post request with json data
问题
我正在尝试在Go/Golang中创建一个键值对的映射,并在进行HTTP POST请求之前使用json.Marshal进行序列化。
jsonData的结构如下:
{
"name":"bob",
"stream":"science",
"grades":[
{
"maths":"A+",
"science":"A"
}
]
}
这个映射的结构是这样的:它有字符串类型的键,值可以是字符串,还可以是一个切片,而切片本身又包含一个映射。所以从Python的角度来看,我想创建一个字典,其中有键值对,但最后一个键的值是一个列表,而列表中又包含一个字典。
代码中的一部分如下:
postBody, err := json.Marshal(map[string]interface{}{
"name": name,
"stream": stream,
"grades": [
{
sub1: sub1_score,
sub2: sub2_score
}
]
})
但是我无法创建这种复杂的映射。
英文:
I am trying to create a map of key values and then json.Marshal it before making an HTTP post request in Go/Golang
jsonData
{"name":"bob",
"stream":"science",
"grades":[{"maths" :"A+",
"science" :"A"}]
}
The structure of the map is like, it has string typed keys and values are strings and a slice and the slice itself has a map. So in terms of python I want to make a dictionary which has key value pairs but last key's value is a list and the list has a dictionary in it.
a part from code is this:
postBody, err := json.Marshal(map[string]interface{}{
"name":name,
"stream":stream,
"grades":[{sub1 :sub1_score,
sub2 :sub2_score}]
})
but failed to make this kind of complex map.
答案1
得分: 2
postBody, err := json.Marshal(map[string]interface{}{
"name": name,
"stream": stream,
"grades": []map[string]interface{}{{
sub1: sub1_score,
sub2: sub2_score,
}},
})
或者,如果你不想重新输入 map[string]interface{}
type Obj map[string]interface{}
postBody, err := json.Marshal(Obj{
"name": name,
"stream": stream,
"grades": []Obj{{
sub1: sub1_score,
sub2: sub2_score,
}},
})
https://go.dev/play/p/WQMiE5gsx9w
英文:
postBody, err := json.Marshal(map[string]interface{}{
"name": name,
"stream": stream,
"grades": []map[string]interface{}{{
sub1: sub1_score,
sub2: sub2_score,
}},
})
or, if you'd like to avoid having to retype map[string]interface{}
type Obj map[string]any
postBody, err := json.Marshal(Obj{
"name": name,
"stream": stream,
"grades": []Obj{{
sub1: sub1_score,
sub2: sub2_score,
}},
})
答案2
得分: 0
Go是一种静态类型语言。
一个空接口可以保存任何类型的值。但是你的嵌套列表没有类型。
之前
[{sub1 :sub1_score, sub2 :sub2_score}]
之后
[]map[string]interface{}{
{
sub1: sub1_score,
sub2: sub2_score,
},
}
英文:
Go is a statically typed language.
An empty interface may hold values of any type. But your nested list has no type.
Before
[{sub1 :sub1_score, sub2 :sub2_score}]
After
[]map[string]interface{}{
{
sub1: sub1_score,
sub2: sub2_score,
},
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论