转到AWS,从DynamoDB项封送到JSON,忽略空值
我试图查询我的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"
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:检查我的答案。