gpt4 book ai didi

go - 解码时如何合并/修改json?

转载 作者:行者123 更新时间:2023-12-01 20:02:39 26 4
gpt4 key购买 nike

我有一些这样的示例json:

"payment_details": {
"acc_number": "",
"sort_code_1": "00",
"sort_code_2": "11",
"sort_code_3": "22"
},
我像这样解开
i := &MyStruct{}
return i, json.Unmarshal(theJson, &i)
我希望MyStruct看起来像这样
type MyStruct struct {
AccNumber *string `json:"acc_number"`
SortCode *string `json:"sort_code"`
}
但是我想将单独的排序代码字段组合为一个,以便最终MyStruct看起来像这样
type MyStruct struct {
AccNumber *string `json:"acc_number"`
SortCode *string `json:"sort_code"` // "00-11-22"
}
拆封时有聪明的方法吗?

最佳答案

您可以编写自己的解码器。最简单的方法是使用表示json形式的辅助结构。 (Complete working example on the playground)

type MyStruct struct {
AccNumber *string
SortCode *string
}

type MyStruct_JSON struct {
AccNumber *string `json:"acc_number"`
SortCode1 string `json:"sort_code_1"`
SortCode2 string `json:"sort_code_2"`
SortCode3 string `json:"sort_code_3"`
}

func (ms *MyStruct) UnmarshalJSON(d []byte) error {
var msj MyStruct_JSON
if err := json.Unmarshal(d, &msj); err != nil {
return err
}
// TODO: error checking for sort codes to check they're well-formed
sortCode := msj.SortCode1 + "-" + msj.SortCode2 + "-" + msj.SortCode3
*ms = MyStruct{
AccNumber: msj.AccNumber,
SortCode: &sortCode,
}
return nil
}
注意:尚不清楚是否需要像 *string这样的所有指针,还是只可以使用 string。后者通常易于使用(并且绝对可以帮助您避免零指针取消引用),但是潜在的缺点是无法区分空值和缺失值。我使用普通的 string作为 SortCode[1,2,3],因为看起来它们必须是两位数字代码才能有效,因此空字符串或缺少字段都是错误。

关于go - 解码时如何合并/修改json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63011740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com