为了账号安全,请及时绑定邮箱和手机立即绑定

无法将字符串解析为 JSON

无法将字符串解析为 JSON

Go
萧十郎 2022-08-01 18:57:54
我正在动态获取字符串作为输入,我需要访问某些字段,因此我尝试将其解析为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"])}但是,这不起作用。为什么?
查看完整描述

4 回答

?
largeQ

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)


查看完整回答
反对 回复 2022-08-01
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

您正在取消编组字符串到字符串的映射。您的数据具有一个整数字段、一个字符串字段和一个结构字段。因此,如果任何数据解析失败,则会得到一个空字符串。此外,没有您尝试访问的“输入”字段。


使用固定结构封送和取消封送数据的最佳方法之一是使用结构标记:


type response struct {

    Page   int      `json:"page"`

    Fruits []string `json:"fruits"`

}

但您也可以使用映射到空接口:


var dat map[string]interface{}

示例源:https://gobyexample.com/json


查看完整回答
反对 回复 2022-08-01
?
冉冉说

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"])

}


查看完整回答
反对 回复 2022-08-01
?
慕无忌1623718

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 对象有点混乱,因此您需要仔细步骤以确保结构符合您的期望。


查看完整回答
反对 回复 2022-08-01
  • 4 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信