4 回答
TA贡献2039条经验 获得超7个赞
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 关注
- 194 浏览
添加回答
举报