我所看到的所有方法都涉及构建结构并将数据解组到结构中.但是,如果我收到数百个字段的JSON响应怎么办?我不想创建100个字段结构只是为了能够获得我想要的数据.来自Java背景,有简单的方法可以简单地将http响应作为字符串获取,然后将JSON字符串传递给允许轻松遍历的JSON对象.这很痛苦.Go中有这样的东西吗?
伪代码中的Java示例:
String json = httpResponse.getBody();
JsonObject object = new JsonObject(json);
object.get("desiredKey");
Run Code Online (Sandbox Code Playgroud)
Aru*_*n G 22
这是我们遇到的典型情况.这是通过json.Unmarshal.
这是一个简单的json
{"textfield":"I'm a text.","num":1234,"list":[1,2,3]}
Run Code Online (Sandbox Code Playgroud)
它被序列化以通过网络发送并在Golang端解组.
package main
import (
"fmt"
"encoding/json"
)
func main() {
// replace this by fetching actual response body
responseBody := `{"textfield":"I'm a text.","num":1234,"list":[1,2,3]}`
var data map[string]interface{}
err := json.Unmarshal([]byte(responseBody), &data)
if err != nil {
panic(err)
}
fmt.Println(data["list"])
fmt.Println(data["textfield"])
}
Run Code Online (Sandbox Code Playgroud)
希望这有用.
json.Unmarshal 方法将解组为不包含原始 JSON 对象中所有字段的结构。换句话说,你可以挑选你的领域。下面是一个示例,其中 FirstName 和 LastName 是精心挑选的,而 MiddleName 从 json 字符串中被忽略:
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
}
func main() {
jsonString := []byte("{\"first_name\": \"John\", \"last_name\": \"Doe\", \"middle_name\": \"Anderson\"}")
var person Person
if err := json.Unmarshal(jsonString, &person); err != nil {
panic(err)
}
fmt.Println(person)
}
Run Code Online (Sandbox Code Playgroud)