使 marshar 从字符串失败

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


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)

}

我一直在努力做到这一点,但没有成功。


一只斗牛犬
浏览 118回答 2
2回答

红颜莎娜

您可以json.Marshaler为任一obj或内部的特定字段实施obj。此封送拆收器可以检查字段的值并返回错误。这是一个为字段添加自定义封送拆收器的示例,Name如果Name是"Boom!"type NameWithValidation stringfunc (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()它们而不是尝试编组项目本身。

郎朗坤

Channel、complex 和 function 值不能用 JSON 编码。尝试对此类值进行编码会导致 Marshal 返回 UnsupportedTypeError。因此,如果您要修改您的结构以包含这些类型中的任何一种并尝试对其进行编组,您将收到错误消息。
打开App,查看更多内容
随时随地看视频慕课网APP