为了账号安全,请及时绑定邮箱和手机立即绑定

使用切片解组结构返回 null 值而不是空切片

使用切片解组结构返回 null 值而不是空切片

Go
慕娘9325324 2023-07-31 16:01:07
如果我创建一个没有任何标签的“照片”,它将存储在 dynamodb 中"tags": {   "NULL": true}, 但是当我查询和解组记录时,我希望它将其转换为空切片,而不是我得到:[{"photo_id":"bmpuh3jg","tags":null}]是否可以将其转换为空切片?例如[{"photo_id":"bmpuh3jg","tags":[]}]代码示例我的结构type Photo struct {    Id        string   `json:"photo_id"`    Tags      []string `json:"tags"`}询问photo := &Photo{}input := &dynamodb.QueryInput{    TableName:                 aws.String("local.photos"),    KeyConditionExpression:    aws.String("photo_id = :photo_id"),    ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{        ":photo_id": {            S: aws.String(photo_id),        },    },}db_result, err := db.Query(input)if err != nil {    return nil, err} else if *db_result.Count == int64(0) {    // No item found    return nil, err}err = dynamodbattribute.UnmarshalListOfMaps(db_result.Items, photo)if err != nil {    return nil, err}photoJSON, err := json.Marshal(photo)if err != nil {    return nil, err}return photoJSON, nil
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

如果我正确理解你的问题,要使用标签 ( ) 的空切片获得结果{"photo_id":"bmpuh3jg","tags":[]},你可以这样做:


  jsonString := `{"photo_id":"bmpuh3jg","tags":null}`


  photo := &Photo{}

  err := json.Unmarshal([]byte(jsonString), &photo)

  if err != nil {

     fmt.Println(err.Error())

  }


  // Here is a trick. Replace nil with an empty slice.

  if photo.Tags == nil {

    photo.Tags = []string{}

  }

  elemJSON, err := json.Marshal(photo)

  if err != nil {

    fmt.Println(err.Error())

  }

  fmt.Println(string(elemJSON)) //{"photo_id":"bmpuh3jg","tags":[]} 

数组和切片值编码为 JSON 数组,但 []byte 编码为 Base64 编码字符串,而 nil 切片编码为空 JSON 值。

查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信