Я пытаюсь преобразовать простую строку объекта DynamoDB:
{
"Item": {
"Id": {
"S": "db31"
},
"CreateTime": {
"N": "1647882237618915000"
}
}
либо в dynamodb.AttributeValue, а затем сопоставить с объектом go (структура типа go) или преобразовать в простой объект JSON go.
Думаю, похожие ответы (1 , 2 , 3) есть и в Java, но подобной реализации в Golang я не нашел.

Вы можете создать тип структуры и использовать json.Unmarshal для демаршалирования строки JSON следующим образом:
package main
import (
"encoding/json"
"fmt"
"os"
)
type Record struct {
Item struct {
Id struct {
S string
}
CreateTime struct {
N string
}
}
}
func main() {
str := `{
"Item": {
"Id": {
"S": "db31"
},
"CreateTime": {
"N": "1647882237618915000"
}
}
}`
var record Record
if err := json.Unmarshal([]byte(str), &record); err != nil {
fmt.Fprintf(os.Stderr, "unmarshal failed: %v", err)
os.Exit(1)
}
fmt.Printf("%s %s", record.Item.Id.S, record.Item.CreateTime.N)
}
Если вам нужен другой подход и вы хотите преобразовать результат в структуру, отличную от JSON, вы можете использовать такую библиотеку, как gjson.
Вот пример «сглаживания» результата в более простую структуру:
package main
import (
"fmt"
"github.com/tidwall/gjson"
)
type Record struct {
Id string
CreateTime string
}
func main() {
str := `{
"Item": {
"Id": {
"S": "db31"
},
"CreateTime": {
"N": "1647882237618915000"
}
}
}`
values := gjson.GetMany(str, "Item.Id.S", "Item.CreateTime.N")
record := Record{
Id: values[0].Str,
CreateTime: values[1].Str,
}
fmt.Printf("%s %s", record.Id, record.CreateTime)
}
Кроме того, как насчет предметов/объектов неизвестной схемы/структуры? Есть ли в AWS SDK код, который автоматически сопоставляет типы DynamoDB с типами JSON/GO?
Проверьте мое редактирование. Вы можете использовать библиотеку, например gjson, для преобразования данных в более чистую структуру, если это то, что вы ищете.
Я надеялся, что в Go это будет более автоматизировано, как в Java, но это сойдет. Спасибо!
да, это то, что я делаю, но доступ к вещам начинает выглядеть так:
item.M["third"].B, и если структуры более вложены, потому что хранимые объекты более сложны, становится очень утомительно читать и понимать. Я надеялся, что в aws sdk будет функция, которая могла бы абстрагировать все эти типы данных DynamoDB и Unmarshal во что-то, что больше похоже на объект JSON/GO. Кроме того, тот, кто не знаком с типами Dyn и представлением объектов JSONL, определенно будет сбит с толку.