解码JSON对象并将值映射到Go中的结构

解码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" } 我发现的大多数解

我已经使用library net http创建了一个Web服务器。我的问题是,我想从一个JSON对象创建一个如下所示的结构,该对象的键名与结构属性不匹配

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的帖子中。