我正在尝试将此嵌套映射编组为 JSON 字符串。map[ description:Foo Bar url:http://foobar.co.uk theme_color:#1b1b1b markdown:kramdown sass:map[ style:compressed ] collections:map[ projects:map[ output:true permalink:/project/:path ] jobs:map[ output:true permalink:/job/:path ] ] title:Foo Bar email:foo@foobarco.uk](清理输出fmt.Printf("%v", m))最初读取并解析配置文件以生成映射,因此我事先不知道这些字段,这意味着我不能(?)使用结构。从 YAML 解组到这张地图map[string]interface{}工作正常,但是当我将此地图传递给 时json.Marshal,出现以下错误。json: unsupported type: map[interface {}]interface{}通过阅读,我可以看到抛出此错误是因为 JSON 仅支持字符串键。让我感到困惑的是,上面的地图似乎没有任何非字符串键。如果我删除嵌套sass和collections键,它可以毫无问题地进行编组。是否可以在地图上进行一些完整性检查以确认所有键都是真实的string,而不仅仅是interface{}看起来像字符串?
2 回答
慕容708150
TA贡献1831条经验 获得超4个赞
最有可能的是,YAML 解析器将子地图创建为 map[interface{}]interface{}。
用“%#v”而不是“%v”打印你的地图,你会看到类型。
package main
import "fmt"
func main() {
a := map[string]interface{}{
"A": map[interface{}]interface{}{
"B": 123,
},
}
fmt.Printf("%#v\n",a)
}
产生:
map[string]interface {}{"A":map[interface {}]interface {}{"B":123}}
POPMUISE
TA贡献1765条经验 获得超5个赞
使用github.com/json-iterator/go
包而不是encode.json
. 它可以编码map[interface{}]interface{}
为JSON
.
https://github.com/json-iterator/go
- 2 回答
- 0 关注
- 273 浏览
添加回答
举报
0/150
提交
取消