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

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

在 Go 中解析一個不熟悉的 YAML/JSON 文件

在 Go 中解析一個不熟悉的 YAML/JSON 文件

Go
牛魔王的故事 2022-03-07 15:38:49
在 Go 中,如何在事先不知道其結構的情況下解析 YAML 數據?我見過的所有示例都假設您想要解碼您已經知道其鍵的封送映射。如果你不知道鑰匙怎么辦?如果它不是地圖而是封送列表、標量或其他一些常見類型怎么辦?盡管我主要關注 YAML,但在這里,該技術似乎通常對 JSON 等有用。因為解析結構化數據(顯然是標記結構)有一個通用模式。
查看完整描述

2 回答

?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

對于 JSON,將數據解組為一個interface{}值。使用類型斷言來確定值中的內容。


var v interface{}

err := json.Unmarshal(data, &v)

if err != nil {

   // handle error

}

switch v := v.(type) {

case string:

    fmt.Println("string:", v)

case float64: 

    fmt.Println("number:", v)

case []interface{}:

    fmt.Println("array:", v)

case map[string]interface{}:

    fmt.Println("object:", v)

case nil:

    fmt.Println("nil")

}


查看完整回答
反對 回復 2022-03-07
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

在 JSON 的情況下,json.Unmarshal如果您愿意,標準庫函數將解組任意 JSON,如果您將指針傳遞給未初始化的空接口。(見這個例子。)

官方文檔甚至說了這么多:

為了將 JSON 解組為接口值,Unmarshal 將其中一項存儲在接口值中:

bool,用于 JSON 布爾值

float64,用于 JSON 數字

字符串,用于 JSON 字符串

[]interface{},用于 JSON 數組

map[string]interface{},用于 JSON 對象

無 JSON null


編輯:雖然沒有記錄,但yaml包也是如此;我在我的工作站上進行了測試,傳入一個指向未初始化的空接口的指針會導致正確的數組、映射和原語的初始化。


查看完整回答
反對 回復 2022-03-07
  • 2 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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