亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將嵌套映射編組為 JSON

將嵌套映射編組為 JSON

Go
慕娘9325324 2021-12-13 17:14:38
我正在嘗試將此嵌套映射編組為 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}}


查看完整回答
反對 回復 2021-12-13
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

使用github.com/json-iterator/go包而不是encode.json. 它可以編碼map[interface{}]interface{}JSON.

https://github.com/json-iterator/go


查看完整回答
反對 回復 2021-12-13
  • 2 回答
  • 0 關注
  • 309 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號