登录
首页 >  Golang >  Go问答

解析包含空字符串字段的 JSON

来源:stackoverflow

时间:2024-02-16 11:27:22 357浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《解析包含空字符串字段的 JSON》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我需要将 json 解析为 go 结构。以下是结构体

type replacement struct {
find        string `json:"find"`
replacewith string `json:"replacewith"`
}

以下是一个 json 示例:

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

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

这里是代码链接:https://play.golang.org/p/sprpz7mnwr6


解决方案


在 go 中,字符串类型不能保存 nil 值,该值对于指针、接口、映射、切片、通道和函数类型来说为零值,代表未初始化的值。

当按照示例中的方式将 json 数据解组为结构时, replacewith 字段确实会是一个空字符串 ("") - 这正是您所要求的。

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")
    }
}

您可以在字符串中使用指针,如果 json 中缺少该值,则该值将为 nil。我过去也做过同样的事情,但目前我身上没有代码。

今天关于《解析包含空字符串字段的 JSON》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>