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

手动读取 JSON 值

手动读取 JSON 值

Go
SMILET 2022-01-17 16:30:46
在 Go 中,我通常将我的 JSON 解组为一个结构并从结构中读取值。它工作得很好。这一次我只关心 JSON 对象的某个元素,因为整个 JSON 对象非常大,我不想创建一个结构。Go 中有没有办法让我可以像往常一样使用键或迭代数组在 JSON 对象中查找值。考虑到以下 JSON,我怎么能只拉出该title字段。{  "title": "Found a bug",  "body": "I'm having a problem with this.",  "assignee": "octocat",  "milestone": 1,  "labels": [    "bug"  ]}
查看完整描述

3 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

不要声明你不想要的字段。


https://play.golang.org/p/cQeMkUCyFy


package main


import (

    "fmt"

    "encoding/json"

)


type Struct struct {

    Title   string  `json:"title"`

}


func main() {

    test := `{

        "title": "Found a bug",

        "body": "I'm having a problem with this.",

        "assignee": "octocat",

        "milestone": 1,

        "labels": [

          "bug"

        ]

    }`


    var s Struct

    json.Unmarshal([]byte(test), &s)


    fmt.Printf("%#v", s)


}

或者,如果您想完全摆脱结构:


var i interface{}

json.Unmarshal([]byte(test), &i)


fmt.Printf("%#v\n", i)

fmt.Println(i.(map[string]interface{})["title"].(string))

或者。它会吞下所有的转换错误。


m := make(map[string]string)


json.Unmarshal([]byte(test), interface{}(&m))


fmt.Printf("%#v\n", m)

fmt.Println(m["title"])


查看完整回答
反对 回复 2022-01-17
?
皈依舞

TA贡献1851条经验 获得超3个赞

要扩展 Darigaaz 的答案,您还可以使用在解析函数中声明的匿名结构。这避免了必须让包级别的类型声明在单一用例的代码中乱扔垃圾。


https://play.golang.org/p/MkOo1KNVbs


package main


import (

    "encoding/json"

    "fmt"

)


func main() {

    test := `{

        "title": "Found a bug",

        "body": "I'm having a problem with this.",

        "assignee": "octocat",

        "milestone": 1,

        "labels": [

          "bug"

        ]

    }`


    var s struct {

        Title string `json:"title"`

    }

    json.Unmarshal([]byte(test), &s)


    fmt.Printf("%#v", s)


}


查看完整回答
反对 回复 2022-01-17
?
浮云间

TA贡献1829条经验 获得超4个赞

查看go-simplejson


例子:


js, err := simplejson.NewJson([]byte(`{

  "test": {

    "string_array": ["asdf", "ghjk", "zxcv"],

    "string_array_null": ["abc", null, "efg"],

    "array": [1, "2", 3],

    "arraywithsubs": [{"subkeyone": 1},

    {"subkeytwo": 2, "subkeythree": 3}],

    "int": 10,

    "float": 5.150,

    "string": "simplejson",

    "bool": true,

    "sub_obj": {"a": 1}

  }

}`))


if _, ok = js.CheckGet("test"); !ok {

  // Missing test struct

}


aws := js.Get("test").Get("arraywithsubs")

aws.GetIndex(0)


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

添加回答

举报

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