2017-10-24 1 views
3

Ich verarbeite Ereignisse von einer JSON API in Go, aber leider jeder zurückgegebene Wert wird als Zeichenfolge eingekapselt.Wie analysiere ich JSON-Werte im richtigen Typ in Go?

Die JSON Ereignisse Form kommen, dass API etwas wie folgt aussehen:

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

nun wie im folgenden Beispiel sieht mein Code diese Evens zu analysieren:

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() 

Nun ist dieser Code ein bisschen repetitiv, aber im Grunde analysiere ich die id, price und time und dann konvertiere ich den Zeitstempel in einen Zeitwert.

Nun meine Frage, kann ich die Werte gleichzeitig mit der Analyse der JSON-Antwort konvertieren? Oder gibt es keine Möglichkeit, die Typumwandlung später durchzuführen, wie in diesem Beispiel gezeigt?

+0

„Meine Frage ist jetzt, kann ich die Werte in der gleichen Zeit konvertieren, wie die JSON-Antwort-Parsing.“ Ja. Bitte schauen Sie sich die Paketdokumentation, das Internet oder einfach _try_ mit 'int' an. – Volker

Antwort

5

Sie müssen string nicht verwenden. Das encoding/json Paket kann die Umwandlung von Saite zu Saite , Gleitkomma, Griff integer oder boolean Typen durch die "string" option in dem Tags.

Als Beispiel versuchen:

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

Wow. Das ist so viel besser – Jacob

Verwandte Themen