2 回答

TA貢獻1852條經(jīng)驗 獲得超1個贊
decoder := json.NewDecoder(r.Body)
psmsg := &PushRequest{}
decoderErr := decoder.Decode(&psmsg)
if decoderErr != nil {
// Error...
return
}
data := Data{}
unmarshalErr := json.Unmarshal([]byte(string(psmsg.Message.Data)), &data)
if unmarshalErr != nil {
// Error...
return
}

TA貢獻1803條經(jīng)驗 獲得超3個贊
這是我的云功能的一個片段,它用作發(fā)布/訂閱推送端點。關鍵是您首先必須使用PushRequest結構解碼主體。接下來,您可以將消息數(shù)據(jù)轉換為結構。根據(jù)文檔,其中的Data字段Message是 base-64 編碼的字符串,因此您必須先對其進行解碼。
type PushRequest struct {
Message pubsub.PubsubMessage `json:"message"`
Subscription string `json:"subscription"`
}
type Example struct {
ID string `json:"id" firestore:"id"`
}
func HTTPEndpoint(w http.ResponseWriter, r *http.Request) {
var pr common.PushRequest
if err := json.NewDecoder(r.Body).Decode(&pr); err != nil {
log.Fatalf("Could not decode body: %v", err)
return
}
data, err := base64.StdEncoding.DecodeString(pr.Message.Data)
if err != nil {
log.Fatalf("Base64: %v", err)
return
}
var example Example
if err := json.Unmarshal(data, &example); err != nil {
log.Fatalf("Json: %v", err)
return
}
// Do something useful with the struct
}
- 2 回答
- 0 關注
- 201 瀏覽
添加回答
舉報