2017-06-12 3 views
0

Je suis incapable de unmarshall une structure de données assez simple:Comment analyser le résultat dynamodb en un entier?

"video_lite": { "id": 1573, "name": "Blade Runner (Movie)" } 

Voici mon code qui ne fonctionne pas:

package main 

import (
    "fmt" 

    "github.com/aws/aws-sdk-go/aws" 
    "github.com/aws/aws-sdk-go/aws/session" 
    "github.com/aws/aws-sdk-go/service/dynamodb" 
    "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute" 
) 

type Video struct { 
    video_lite struct { 
     name string 
     id int 
    } 
} 

func check(err error) { 
    if err != nil { 
     panic(err.Error()) 
    } 
} 

func main() { 

    svc := dynamodb.New(session.New()) 

    input := &dynamodb.GetItemInput{ 
     Key:     map[string]*dynamodb.AttributeValue{"uuid": {S: aws.String("d610e853-5222-462c-9bb3-26ff5aa86e9d")}}, 
     ProjectionExpression: aws.String("video_lite"), 
     TableName:   aws.String("staging_video_ingestion"), 
    } 

    result, err := svc.GetItem(input) 
    check(err) 

    fmt.Printf("%+v\n", result.Item) 
    var t Video 

    err = dynamodbattribute.UnmarshalMap(result.Item, &t) 
    check(err) 

    fmt.Printf("%+v\n", t) 

} 

La sortie ressemble à:

map[video_lite:{ 
    M: { 
    id: { 
     N: "1573" 
    }, 
    name: { 
     S: "Bladerunner (Movie)" 
    } 
    } 
}] 
{video_lite:{name: id:0}} 

Pourquoi le UnmarshalMap ne fonctionne-t-il pas?

Répondre

0

Probablement vous pouvez modifier votre struct à ceci:

type Video struct { 
     video_lite struct { 
     name struct { 
      N *string 
      S *string 
     } 
     id struct { 
      N *string 
      S *string 
     } 
    } 
    } 
+0

que '{Essayé video_lite: {name: {N: S: } id: {N: S: }}}' était la sortie. Également essayé d'abandonner 'video_lite' et a obtenu' {nom: {N: S: } id: {N: S: }} ': / – hendry

0

Unmarshal au lieu de UnmarshalMap semble être plus facile de travailler avec.

type Video struct { 
    Name string `dynamodbav:"name"` 
    ID int `dynamodbav:"id"` 
} 

J'ai jeté dans le dynamodbav struct tags dans un acte de désespoir. Il semble qu'ils ne sont pas nécessaires lors du démantèlement. Et maintenant je retourne la valeur de la carte, au lieu de la carte entière résultat.Item que je n'ai jamais compris comment se rendre au travail avec UnmarshalMap. :/

err = dynamodbattribute.Unmarshal(result.Item["video_lite"], &t)