在我的json数据结构中,我有一个可以有前缀的字符串。解组JSON时,是否可以使用函数删除该前缀?我正在研究golang中的自定义JSON解组并尝试利用它。
例如。有效载荷可以是以下任何一种
{
"id": "urn:uuid:1234567890"
}
{
"id": "1234567890"
}
当我执行JSON.unmarshall(data, &struct)
时,我希望unmarshall函数处理从字符串中删除urn:uuid
前缀(如果存在),那么结构将始终具有值1234567890
for { {1}}。
答案 0 :(得分:2)
您可以为需要修剪的数据提供自定义UnmarshalJSON方法,这是一个示例实现,如果必须匹配start,而不是匹配硬字符串(或者在这种情况下为字节数组),则可能需要扩展:
package main
import (
"bytes"
"encoding/json"
"log"
)
var (
sampleJSON = []byte(`{"id": "urn:uuid:1234567890"}`)
prefixToTrim = []byte(`urn:uuid:`)
)
type IDField string
type Data struct {
ID IDField `json:"id"`
}
func main() {
d := &Data{}
err := json.Unmarshal(sampleJSON, d)
if err != nil {
log.Fatal(err)
}
log.Println(d.ID)
}
// UnmarshalJSON provides custom unmarshalling to trim `urn:uuid:` prefix from IDField
func (id *IDField) UnmarshalJSON(rawIDBytes []byte) error {
// trim quotes and prefix
trimmedID := bytes.TrimPrefix(bytes.Trim(rawIDBytes, `"`), prefixToTrim)
// convert back to id field & assign
*id = IDField(trimmedID)
return nil
}