gpt4 book ai didi

go - 使 marshar 从字符串失败

转载 作者:数据小太阳 更新时间:2023-10-29 03:10:49 24 4
gpt4 key购买 nike

是否有可能在接收到一些字符串后在 getJSONStr 函数中使 marshall 失败?

package main

import (
"fmt"
"encoding/json"
)

type obj struct {
Name string `json:"name"`
}

func getJSONStr(s string) (*string, error) {
t := new(obj)
t.Name = s
b, err := json.Marshal(t)
if err != nil {
return nil, err
}
str := string(b)
return &str, nil
}

func main() {
str, err := getJSONStr("VALIDATE")
fmt.Println("str",*str)
fmt.Println("err",err)
}

我一直在努力,但没有成功。

最佳答案

您可以为 objobj 中的特定字段实现 json.Marshaler。此编码(marshal)拆收器可以检查字段的值并返回错误。下面是一个为 Name 字段添加自定义编码(marshal)拆收器的示例,如果 Name"Boom!"

,该编码(marshal)拆收器将失败
type NameWithValidation string

func (s NameWithValidation) MarshalJSON() ([]byte, error) {
if string(s) == "Boom!" {
return nil, fmt.Errorf("Name '%s' failed validation", s)
}
return json.Marshal(string(s))
}

type obj struct {
Name NameWithValidation `json:"name"`
}

编码时,json.Marshal() 检查类型是否实现了 json.Marshaler如果这是真的,它会在它们上调用 MarshalJSON() 而不是尝试编码项目本身。

关于go - 使 marshar 从字符串失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52211141/

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