无法将字符串解析为 JSON

我正在动态获取字符串作为输入,我需要访问某些字段,因此我尝试将其解析为JSON,但我的代码不起作用。


我需要能够获取某些字段的值,如输入['school_id'],并且需要将输入['school_details']的值隐藏到map[string]字符串中。这是我尝试过的:


func main() {

    input := `{"school_capacity":2000,"school_id":"10","school_details":{"classes":"8","subjects":"5","teachers":"15"}}`


    var raw map[string]string


    json.Unmarshal([]byte(input), &raw)


    print(raw["input"])

}

但是,这不起作用。为什么?


萧十郎
浏览 195回答 4
4回答

largeQ

   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)

侃侃尔雅

您正在取消编组字符串到字符串的映射。您的数据具有一个整数字段、一个字符串字段和一个结构字段。因此,如果任何数据解析失败,则会得到一个空字符串。此外,没有您尝试访问的“输入”字段。使用固定结构封送和取消封送数据的最佳方法之一是使用结构标记:type response struct {    Page   int      `json:"page"`    Fruits []string `json:"fruits"`}但您也可以使用映射到空接口:var dat map[string]interface{}示例源:https://gobyexample.com/json

冉冉说

这成功了:https://repl.it/@ruoyanss/jsonParsepackage mainimport (  "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"])}

慕无忌1623718

您应该使用 来存储 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 对象有点混乱,因此您需要仔细步骤以确保结构符合您的期望。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go