我想创建一个可以转换为json对象的地图,例如
{
"a": "apple",
"b": 2
}
Run Code Online (Sandbox Code Playgroud)
但是golang指定地图是用类型声明的,所以我可以有map [string] string或map [string] int.如何像上面那样创建一个json对象?
注意:在运行时或需要创建json对象时,我不知道需要什么数据和/或类型.因此,我不能只创建一个像这样的对象
type Foo struct {
A string `json:"a"`
B int `json:"b"`
}
Run Code Online (Sandbox Code Playgroud)
ANi*_*sus 39
您始终可以interface{}
用来存储任何类型.正如encoding/json
包中的文档所说:
为了将JSON解组为接口值,Unmarshal将JSON解组为接口值中包含的具体值.如果接口值为nil,即没有存储具体值,则Unmarshal将其中一个存储在接口值中:
bool,用于JSON布尔值
float64,用于JSON数字
字符串,用于JSON字符串
[] interface {},用于JSON数组
map [string] interface {},用于JSON对象
nil用于JSON null
只需执行以下操作:
m := map[string]interface{}{"a":"apple", "b":2}
Run Code Online (Sandbox Code Playgroud)
小智 8
为了回应评论,我认为为 Map 和 Slice 添加类型定义更容易,然后您不必担心复杂的文字声明:
package main
import "fmt"
type Map map[string]interface{}
type Slice []interface{}
func main() {
m := Map{
"a": "apple",
"b": 2,
"c": Slice{"foo", 2, "bar", false, Map{"baz": "bat", "moreFoo": 7}},
}
fmt.Println(m)
}
Run Code Online (Sandbox Code Playgroud)
https://golang.org/ref/spec#Type_definitions
归档时间: |
|
查看次数: |
17418 次 |
最近记录: |