转到AWS,从DynamoDB项封送到JSON,忽略空值

转到AWS,从DynamoDB项封送到JSON,忽略空值,json,amazon-web-services,go,amazon-dynamodb,aws-sdk,Json,Amazon Web Services,Go,Amazon Dynamodb,Aws Sdk,我试图查询我的DynamoDB表,并将结果转换为json字符串 sess, _ := session.NewSession(&aws.Config{ Region: aws.String("eu-central-1")}, ) dyn = dynamodb.New(sess) var limit int64 = 5 out, err := dyn.Scan(&dynamodb.ScanInput{ TableName: aws.String("Products"

我试图查询我的DynamoDB表,并将结果转换为json字符串

sess, _ := session.NewSession(&aws.Config{
    Region: aws.String("eu-central-1")},
)
dyn = dynamodb.New(sess)

var limit int64 = 5
out, err := dyn.Scan(&dynamodb.ScanInput{
    TableName: aws.String("Products"),
    Limit: &limit,
})

b, _ := json.Marshal(out.Items[0])
fmt.Println(string(b))
但不幸的是,结果中充满了空值,我不想通过电线发送整个内容:

"Price":{"B":null,"BOOL":null,"BS":null,"L":null,"M":null,"N":"17119","N
S":null,"NULL":null,"S":null,"SS":null}
我知道这与dynamo.AttributeValue类型有关。 是否可以省略空值


谢谢。

您应该可以使用JSON结构省略空标记来完成此操作

type Total struct {
    A *ColorGroup`json:",omitempty"`
    B string`json:",omitempty"`
}
所以我找到了“一个”答案,但我不知道是否有更好的答案

var p Product
dynamodbattribute.UnmarshalMap(out.Items[0], &p)
b, _ := json.Marshal(p)
fmt.Println(string(b))
首先,我将该项从DynamoDB解组到Go结构,然后封送到JSON。 这似乎需要做很多工作,我更愿意从
map[string]*AttributeValue直接转换成JSON字符串(当然没有这些
NULL
值)


因此,如果有人能想出更优雅的东西,请分享。

问题是该类型是aws sdk的一部分,对吧,但您不在某个时候创建一个dynamo属性项吗?MarshallMap(项目)我的答案基于此:dynamodbattribute表中的数据是如何创建的无关紧要。我有一个带JSON注释的产品结构,但在这里没有帮助,因为问题似乎出在dynamo.AttributeValue类型上。我必须首先解组AttributeValue,然后封送到JSON:检查我的答案。