2017-01-13 14 views
0

最近私はgolangとeasyjsonで作業を始めました。今私はjson配列を構造体にアンマーシャリングしてそれを処理する必要があります。 これは私が得たものです。easyjson unmarshal array into go struct

の着信JSONデータはこの

[ 
    { 
     "Item1":true, 
     "Item2":"hello", 
     "Item3":{ 
      "A": 1, 
     }, 
    }, 
    ... 
] 

私の構造体のようになります。

​​

(私は* _easyjson.goファイルをビルド)

そして、ここで私はeasyjsonを使用する方法です:

func ConvertJsonToItem(jsondata string) Item { 
    var item Item 
    lexer := jlexer.Lexer{Data: []byte(jsondata)} 

    item.UnmarshalEasyJSON(&lexer) 
    if lexer.Error() != nil { 
     panic(lexer.Error()) 
    } 
    return Item 
} 

それはうまくいきません、私は知っています。なぜなら、Jsonは "Item"構造の配列から成っているからです。しかし、何かを書いてください。

var items []Item 

私はUnmarshalEasyJSONをスライスで実行することができないため、どちらかが動作しません。 私はeasyjsonを使用しています。なぜなら、jsonデータを処理するためのファストネットの方法だからです。

私の質問は:どのように私はeasyjsonでオブジェクト配列を処理できますか?

ところで、私はこの質問がこの1つに似ていることを知っていますUnmarshal json into struct: cannot unmarshal array into Go valueしかしそこにユーザーは組み込みのjsonパッケージを使い、easyjsonを使いたいです。 ありがとうございます。

答えて

0

//easyjson:json 
type ItemSlice []Item 

については何?

その後、あなたは

func ConvertJsonToItem(jsondata string) ItemSlice { 
    var items ItemSlice 
    lexer := jlexer.Lexer{Data: []byte(jsondata)} 

    items.UnmarshalEasyJSON(&lexer) 
    if lexer.Error() != nil { 
     panic(lexer.Error()) 
    } 
    return items 
} 

を行うことができますそして、あなたは本当にあなたの外側のコードでItemSliceをしたくない場合は、あなたはまだそれを返す前に[]Itemに戻って、それを変換することができます(ただし、あなたがする必要があります後でマーシャリングしたい、それとはまったく同じ操作です)。