2017-10-24 18 views
3

私はGoのJSON APIからイベントを処理していますが、残念ながら返されるすべての値は文字列としてカプセル化されています。 APIには、次のようにやや見えることフォームくる正しいタイプのJSON値をGoで解析するには?

JSONイベント:

[ 
    { 
    "id": "283702", 
    "price": "59.99", 
    "time": "1508813904", 
    "type": "some_update" 
    }, 
    { 
    "id": "283701", 
    "price": "17.50", 
    "time": "1508813858", 
    "type": "some_update" 
    } 
] 

は今これら追いついを解析するために私のコードは次の例のようになります

type event []struct { 
    ID string `json:"id"` 
    Price string `json:"price"` 
    Time string `json:"time"` 
    Type string `json:"type"` 
} 

// Requesting and parsing events here ... 

id, err := strconv.ParseInt(event.ID, 0, 64) 
if err != nil { 
    return err 
} 

price, err := strconv.ParseFloat(event.Price, 64) 
if err != nil { 
    return err 
} 

timestamp, err := strconv.ParseInt(event.Time, 0, 64) 
if err != nil { 
    return err 
} 

datetime := time.Unix(timestamp, 0).UTC() 

は今、このコードは少しあります繰り返しますが、基本的に私はidpricetimeを解析しています。そして、タイムスタンプを時間値に変換しています。

私の質問は、JSON応答の解析と同時に値を変換できますか?または、これを回避する方法がないので、この例に示すように後で型変換を行う必要がありますか?

+0

「今、私の質問に、私はJSONレスポンスを解析すると同時に値を変換することができます。」はい。パッケージのドキュメントやインターネットを見てみるか、 'int'を使って_try_してください。 – Volker

答えて

5

stringタイプを使用する必要はありません。 encoding/jsonパッケージは、ストリング浮動小数点整数、またはタグで"string" optionを用いてブールタイプに文字列から変換を処理することができます。

例として、試してみてください。

type event []struct { 
    ID uint64 `json:"id,string"` 
    Price float64 `json:"price,string"` 
    Time int64 `json:"time,string"` 
    Type string `json:"type"` 
} 
+0

うわー。これははるかに良いです – Jacob