在 Go 语言中,可以使用json包来处理 JSON 数据。JSON 标签json:"fieldName"可以用来指定结构体字段在编码和解码时的名称,并且还可以使用-来表示该字段在编码和解码时忽略。\n\n不过,Go 语言的json标签并没有提供直接的offset选项来解析 JSON 数据。如果想要实现解析 JSON 数据时跳过某些字段,可以通过自定义 UnmarshalJSON 方法来实现。\n\n以下是一个示例代码,演示了如何在解析 JSON 数据时跳过某些字段:\n\ngo\npackage main\n\nimport (\n "encoding/json"\n "fmt"\n)\n\ntype Person struct {\n Name string `json:"name"`\n Age int `json:"-`"\n Email string `json:"email"`\n Telephone string `json:"-`"\n}\n\nfunc (p *Person) UnmarshalJSON(data []byte) error {\n type Alias Person\n aux := &struct {\n Age int `json:"-`"\n Telephone string `json:"-`"\n *Alias\n }{\n Alias: (*Alias)(p),\n }\n if err := json.Unmarshal(data, &aux); err != nil {\n return err\n }\n p.Age = aux.Age\n p.Telephone = aux.Telephone\n return nil\n}\n\nfunc main() {\n jsonData := `{\n "name": "Alice",\n "age": 25,\n "email": "alice@example.com",\n "telephone": "123456789"\n }`\n\n var person Person\n if err := json.Unmarshal([]byte(jsonData), &person); err != nil {\n fmt.Println("Error:", err)\n return\n }\n\n fmt.Println(person)\n}\n\n\n在上面的代码中,Person结构体有四个字段NameAgeEmailTelephoneAgeTelephone字段使用-标签,表示在编码和解码时忽略。在UnmarshalJSON方法中,通过定义一个辅助结构体aux,并将Person结构体的字段赋值给aux的相应字段。然后,使用json.Unmarshal来解析 JSON 数据到aux。最后,将aux中的字段值赋值回Person结构体。\n\n运行上述代码,输出结果为:\n\n\n{Name:Alice Age:0 Email:alice@example.com Telephone:}\n\n\n从输出结果可以看到,AgeTelephone字段的值被忽略了。

Golang JSON 标签偏移解析:跳过字段的技巧

原文地址: https://www.cveoy.top/t/topic/qbHz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录