我很難解組從 AWS lambda 函數發送給我的結構。pkidata無論我做什么,所有字段都是空的。我創建了這個代碼示例來隔離這個過程:package mainimport ( "encoding/base64" "encoding/json" "fmt")func main() {// yeah the string is long lol var body ResponseBody if err := json.Unmarshal([]byte(mystring), &body); err != nil { fmt.Println(fmt.Errorf("failed unmarshaling response | %s", err.Error())) } fmt.Println(body.Error.ErrorMessage) certChain, err := base64.StdEncoding.DecodeString(mystring) if err != nil { fmt.Println(err.Error()) } fmt.Println(certChain)}type PkiGenerationInput struct { TeacherUsername string `json:"teacherusername"`}type Response struct { Headers ResponseHeaders `json:"headers"` Body ResponseBody `json:"body"`}type ResponseHeaders struct { ContentType string `json:"Content-Type"`}type ResponseBody struct { PkiData ParsablePkiData `json:"pkidata"` Error struct { ErrorMessage string `json:"errormessage"` ErrorType string `json:"errortype"` } `json:"error"`}type ParsablePkiData struct { Certificate string `json:"certificate"` PrivateKey string `json:"privatekey"` CertificateChain string `json:"certificatechain"`}這是輸出errormessagetestillegal base64 data at input byte 0[]事實上,我可以閱讀errormessagetest節目,解組有點管用,所以這很奇怪。我檢查了任何未導出的字段,但我們可以清楚地看到它們都是大寫的。我還“只是為了看看”減小了字符串大小,但它沒有改變任何東西。
1 回答

RISEBY
TA貢獻1856條經驗 獲得超5個贊
綜合所有評論的答案:
首先,我的“愚蠢錯誤”是因為我試圖解碼錯誤的變量:
// mystring needs to be replaced by body.PkiData.Certificate
base64.StdEncoding.DecodeString(mystring)
但研究讓我們發現,json.Unmarshal()當結果類型與聲明的類型匹配時,該函數會自行解碼 base64。鑒于編碼數據是 a ,我只是在結構中用 a[]byte替換了string類型。[]byte
這允許創建以前代碼的更簡單版本:
type ResponseBody struct {
PkiData PkiData `json:"pkidata"`
}
type PkiData struct {
Certificate []byte
PrivateKey []byte
CertificateChain []byte
}
var body ResponseBody
if err := json.Unmarshal(rawResp.Payload, &body); err != nil {
return PkiData{}, fmt.Errorf("failed unmarshaling response | %s", err.Error())
}
- 1 回答
- 0 關注
- 203 瀏覽
添加回答
舉報
0/150
提交
取消