2017-06-12 16 views
0

私はかなり単純なデータ構造をアンマーシャリングすることができないよ:dynamodbの結果を整数に解析するには?

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

は、ここでは動作しません。私のコードです:

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) 

} 

出力は次のようになります。

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

なぜUnmarshalMapの仕事はありませんか?

答えて

0

おそらくあなたはこれにあなたの構造体を変更することができます。

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

は' {}}:{名:{N: S:} ID:{N: S video_lite}ことを試みました。また、 'video_lite'を落として、{name:{N: S:} ID:{N: S:}}':/ – hendry

0

Unmarshalの代わりUnmarshalMapがで作業しやすいように表示されます。

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

私は絶望の行為でdynamodbav struct tagsに投げた。アンマーシャリングするときには不要なようです。そして、今私はマップ全体の代わりに、マップ値を返します結果。私はUnmarshalMapで動作するようになったことが分かりませんでした。 : `出力された/

err = dynamodbattribute.Unmarshal(result.Item["video_lite"], &t) 
関連する問題