-2

我需要将 JSON 解析为 Go 结构。以下是结构

type Replacement struct {
Find        string `json:"find"`
ReplaceWith string `json:"replaceWith"`
}

以下是一个示例 json:

{
"find":"TestValue",
"replaceWith":""
}

对于某些字段,输入 json 可以有空值。默认情况下, Go 的encoding/jsonnil为 JSON 中提供的任何空字符串取值。我有一个下游服务,它查找并替换replaceWith配置中的值。这导致我的下游服务出现问题,因为它不接受nil参数replaceWith。我有一个解决方法,我将nil值替换为 ,"''"但这可能会导致某些值被替换为''. 有没有办法让 json将空字符串解析为 nil 而只是""

这是代码的链接:https: //play.golang.org/p/SprPz7mnWR6

4

2 回答 2

1

在 Go 中,字符串类型不能保存nil指针、接口、映射、切片、通道和函数类型的零值,表示未初始化的值。

当您像在示例ReplaceWith字段中那样将 JSON 数据解组为 struct 时,确实会是一个空字符串 ( "") - 这正是您所要求的。

type Replacement struct {
    Find        string `json:"find"`
    ReplaceWith string `json:"replaceWith"`
}

func main() {
    data := []byte(`
    {
           "find":"TestValue",
           "replaceWith":""
    }`)
    var marshaledData Replacement
    err := json.Unmarshal(data, &marshaledData)
    if err != nil {
        fmt.Println(err)
    }
    if marshaledData.ReplaceWith == "" {
        fmt.Println("ReplaceWith equals to an empty string")
    }
}
于 2021-02-02T04:07:48.843 回答
0

您可以在字符串中使用指针,如果 JSON 中缺少该值,那么它将为零。我过去也做过同样的事情,但目前我没有代码。

于 2021-02-02T03:52:45.597 回答