marshal 和 unmarshal 时动态更改 json key

marshal 和 unmarshal 时动态更改 json key

php小编小新将为大家介绍一种在Marshal和Unmarshal过程中动态更改JSON键值的方法。在处理JSON数据时,有时候我们需要对键值进行修改或替换。本文将分享一个简单而有效的技巧,帮助开发者在PHP中实现这一目标。通过使用一些特定的函数和技术,我们可以轻松地对JSON数据进行操作,实现动态更改键值的需求。接下来,请跟随小编一起学习这个实用的技巧吧!

问题内容

我被迫使用一个 API,该 API 对于同一对象(增值税号)有两个不同的密钥或标识符。取决于调用的是 GET 还是 POST/PATCH

在 GET 中,我必须使用此结构对 json 进行解组/解码:

type SilverfinCompany struct {    ID                     int    `json:"id"`    Name                   string `json:"name"`    Vat                    string `json:"vat"` // here}

登录后复制

在 POST 和 PATCH 中,我可以使用此结构将数据编组为 json:

type SilverfinCompany struct {    ID                     int    `json:"id"`    Name                   string `json:"name"`    Vat                    string `json:"vat_identifier"` // here}

登录后复制

显而易见的解决方案是拥有两个内容相同但 JSON 键略有不同的“不同”结构,以及两个转换函数。或者在结构中有两个不同的字段:Vat 和 VatIndentifier。

问题在于,它会给已经很复杂的代码增加额外的复杂性。

所以我想知道:

有没有办法(类似反射)根据情况改变结构中 Vat 字段的 JSON 键?

解决方法

您无法在运行时修改类型定义,包括结构标记。

只要字段类型和顺序(即内存布局)相同,就根本不需要任何转换函数,它们可以直接转换:https://go.dev/play/p/IhkVM-BMLiY

func main() {    foo := SilverfinCompanyFoo{        ID:   1,        Name: "Baz",        Vat:  "Qux",    }    bar := SilverfinCompanyBar(foo)    fmt.Println(bar)}type SilverfinCompanyFoo struct {    ID   int    `json:"id"`    Name string `json:"name"`    Vat  string `json:"vat"` // here}type SilverfinCompanyBar struct {    ID   int    `json:"id"`    Name string `json:"name"`    Vat  string `json:"vat_identifier"` // here}// {1 Baz Qux}

登录后复制

这是此类场景的常见解决方案。

以上就是marshal 和 unmarshal 时动态更改 json key的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2355391.html

(0)
上一篇 2025年3月1日 15:14:38
下一篇 2025年3月1日 15:14:55

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论