猿问

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

如果我创建一个没有任何标签的“照片”,它将存储在 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


慕娘9325324
浏览 106回答 1
1回答

呼啦一阵风

如果我正确理解你的问题,要使用标签 ( ) 的空切片获得结果{"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 值。
随时随地看视频慕课网APP

相关分类

Go
我要回答