解码JSON对象并将值映射到Go中的结构
我已经使用library net http创建了一个Web服务器。我的问题是,我想从一个JSON对象创建一个如下所示的结构,该对象的键名与结构属性不匹配解码JSON对象并将值映射到Go中的结构,go,struct,Go,Struct,我已经使用library net http创建了一个Web服务器。我的问题是,我想从一个JSON对象创建一个如下所示的结构,该对象的键名与结构属性不匹配 type JsonData struct { Operation string IsStaff int } 从服务器发送的JSON对象是: { "function": "search", "is_staff": 1 "description": "Test" } 我发现的大多数解
type JsonData struct {
Operation string
IsStaff int
}
从服务器发送的JSON对象是:
{
"function": "search",
"is_staff": 1
"description": "Test"
}
我发现的大多数解决方案都是创建另一个结构,其中JSON键和结构属性名称相互匹配。有没有办法将解码的JSON映射到我的JsonData结构?下面是我当前的功能
func handler(w http.ResponseWriter, r *http.Request){
switch r.Method {
case http.MethodPost:
var data JsonData
err := json.NewDecoder(r.Body).Decode(&data)
}
}
在中搜索“标记”
基本上,您可以使用特殊注释标记结构字段,这些注释告诉默认的un/marshaler使用给定的名称,而不是结构字段的(不区分大小写)名称
对于您的结构,您可能只需执行以下操作,具体取决于您的实际意图:
type JsonData struct {
Operation string `json:"function"`
IsStaff int `json:"is_staff"`
}
func main() {
jsonstr := `{"function":"search","is_staff":1,"description":"Test"}`
var jd JsonData
err := json.Unmarshal([]byte(jsonstr), &jd)
fmt.Printf("OK: jd=%#v, err=%v\n", jd, err)
// OK: jd=main.JsonData{Operation:"search", IsStaff:1}, err=<nil>
}
类型JsonData结构{
操作字符串`json:“函数”`
IsStaff int`json:“是工作人员”`
}
func main(){
jsonstr:=`{“函数”:“搜索”,“is_职员”:1,“描述”:“测试”}`
var jd JsonData
err:=json.Unmarshal([]字节(jsonstr),&jd)
fmt.Printf(“确定:jd=%#v,err=%v\n”,jd,err)
//OK:jd=main.JsonData{操作:“搜索”,IsStaff:1},错误=
}
使用结构标记。它们包含在编码/json
文档中,以及大多数关于json和Go的帖子中。