4 回答

TA貢獻2039條經驗 獲得超8個贊
input := `{"school_capacity":2000,"school_id":"10","school_details":{"classes":"8","subjects":"5","teachers":"15"}}`
var raw map[string]interface{}
json.Unmarshal([]byte(input), &raw)
fmt.Printf("%v", raw)

TA貢獻1801條經驗 獲得超16個贊
您正在取消編組字符串到字符串的映射。您的數據具有一個整數字段、一個字符串字段和一個結構字段。因此,如果任何數據解析失敗,則會得到一個空字符串。此外,沒有您嘗試訪問的“輸入”字段。
使用固定結構封送和取消封送數據的最佳方法之一是使用結構標記:
type response struct {
Page int `json:"page"`
Fruits []string `json:"fruits"`
}
但您也可以使用映射到空接口:
var dat map[string]interface{}
示例源:https://gobyexample.com/json

TA貢獻1877條經驗 獲得超1個贊
這成功了:https://repl.it/@ruoyanss/jsonParse
package main
import (
"fmt"
"encoding/json"
)
func main() {
str := `{"school_capacity":2000,"school_id":"10","school_details":{"classes":"8","subjects":"5","teachers":"15"}}`
var raw map[string]interface{}
json.Unmarshal([]byte(str), &raw)
fmt.Println(raw["school_capacity"])
}

TA貢獻1744條經驗 獲得超4個贊
您應該使用 來存儲 JSON 對象。 不會處理數字、布爾或嵌套對象的元素。map[string]interface{}map[string]string
完成此操作后,您可以查看地圖的元素:
fmt.Print(raw["school_details"])
并且可以使用類型斷言將嵌套對象拉出,從而有效地將嵌套對象強制轉換為 :map[string]interface{}
if schoolDetails, ok := raw["school_details"].(map[string]interface{}); ok {
fmt.Printf("%v\n", schoolDetails["classes"])
}
使用任意 JSON 對象有點混亂,因此您需要仔細步驟以確保結構符合您的期望。
- 4 回答
- 0 關注
- 217 瀏覽
添加回答
舉報