我正在嘗試將此嵌套映射編組為 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:[email protected]](清理輸出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 關注
- 309 瀏覽
添加回答
舉報
0/150
提交
取消