登录
首页 >  Golang >  Go问答

在 Go 中使用 struct 处理空 JSON 数组

来源:stackoverflow

时间:2024-02-12 14:12:24 391浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《在 Go 中使用 struct 处理空 JSON 数组》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我们有结构体,在 golang 中追加结构体后得到 null。 找到下面的结构体以及我在 golang 中的部分代码。

type xmloutroomrate struct {    
cancellationpolicy policies `bson:"cancellationpolicy" json:"cancellationpolicy"`
}


type policies struct {
    policies []roompolicies `bson:"policies" json:"policies"`
}


type roompolicies struct {
    amount            float64 `bson:"amount" json:"amount"`
    daysbeforecheckin int     `bson:"daysbeforecheckin" json:"daysbeforecheckin"`
} 

cancelpolicymain := policies{}
cancelpolicy := roompolicies{}

if cancelamount < 0 {
  cancelpolicy.amount = cancelamount
  cancelpolicy.daysbeforecheckin = cancelday
  cancelpolicymain.policies = append(cancelpolicymain.policies, cancelpolicy)
}else{
  cancelpolicymain = agodapolicies{}
  cancelpolicymain.policies = append(cancelpolicymain.policies)
}

当数据存在时获得正确的数据结构。

"cancellationpolicy": {
   "policies": [
                {
                  "amount": 5141.58,
                  "daysbeforecheckin": 5
                }
              ]
}

但是当数据不可用时,获取具有空值的结构。

"cancellationpolicy": {
            "policies": null
           }

我们需要带有空白数组 [] 的实际输出。

"cancellationPolicy": {
            "policies": []
           }

正确答案


nil 切片值被编组为 json null 值。这在 json.Marshal() 中有记录:

nil 空切片将编组到空 json 数组中。因此,只需将 policies.policies 初始化为非 nil 空切片,输出中将是 []

cancelpolicymain = policies{policies: []roompolicies{}}

测试代码:

const cancelday = 1

for cancelamount := -500.0; cancelamount <= 501; cancelamount += 1000 {
    cancelpolicymain := policies{}
    cancelpolicy := roompolicies{}

    if cancelamount < 0 {
        cancelpolicy.amount = cancelamount
        cancelpolicy.daysbeforecheckin = cancelday
        cancelpolicymain.policies = append(cancelpolicymain.policies, cancelpolicy)
    } else {
        cancelpolicymain = policies{policies: []roompolicies{}}
        cancelpolicymain.policies = append(cancelpolicymain.policies)
    }

    x := xmloutroomrate{cancelpolicymain}
    if err := json.newencoder(os.stdout).encode(x); err != nil {
        panic(err)
    }
}

输出(在 Go Playground 上尝试):

{"cancellationPolicy":{"policies":[{"amount":-500,"daysBeforeCheckIn":1}]}}
{"cancellationPolicy":{"policies":[]}}

理论要掌握,实操不能落!以上关于《在 Go 中使用 struct 处理空 JSON 数组》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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