在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"
]
}
Run Code Online (Sandbox Code Playgroud)
不要声明你不想要的字段.
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)
}
Run Code Online (Sandbox Code Playgroud)
或者如果你想完全摆脱结构:
var i interface{}
json.Unmarshal([]byte(test), &i)
fmt.Printf("%#v\n", i)
fmt.Println(i.(map[string]interface{})["title"].(string))
Run Code Online (Sandbox Code Playgroud)
要么.它会吞下所有转换错误.
m := make(map[string]string)
json.Unmarshal([]byte(test), interface{}(&m))
fmt.Printf("%#v\n", m)
fmt.Println(m["title"])
Run Code Online (Sandbox Code Playgroud)
为了扩展 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)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |