[英]How to decode base64 encoded JSON in Go
我有地圖的類型的map[string][]byte
,現在的值[]byte
是base64編碼。 我想進一步使用該[]byte
中編碼的 JSON。 現在我這樣做是為了解碼 base64 []byte
數組。
假設我的secretInfo
看起來像這樣
apiVersion: v1
kind: Secret
metadata:
namespace: kube-system
name: my-credentials
data:
secret_account.json: SGVsbG8sIHBsYXlncm91bmQ= // My base64 encoded data(not real/Actual data)
bytes, _ := b64.StdEncoding.DecodeString(string(secretInfo.Data["secret_account.json"])) // Converting data
var privateKeyJSON map[string]interface{}
err := json.Unmarshal(bytes, &privateKeyJSON)
if err != nil {
r.Logger.Infof("Failed to parse secret %v", err)
}
現在,我將 JSON 的值作為字符串傳遞給其他 JSON。
secretInfo.StringData["DecodedPrivateKeyJson"] = string(bytes)
它向我拋出一個錯誤,指出 StringData.DecodedPrivateKeyJson 中的預期 JSON。
我錯過了什么?
上面的代碼中似乎存在一些問題
添加少數情況下的示例代碼,希望有幫助:)
包主
import (
b64 "encoding/base64"
"encoding/json"
"fmt"
)
func main() {
encodedJSONTestData := []string{
"ewoiZmlyc3RuYW1lIjoiSmhvbiIsCiJsYXN0bmFtZSI6ICJEb2UiCn0=",
"",
"!@#$%rtgfdjkmyhm",
}
for i, encodedJSON := range encodedJSONTestData {
fmt.Println("Case", i)
bytes, err := b64.StdEncoding.DecodeString(encodedJSON) // Converting data
if err!=nil{
fmt.Println("Failed to Decode secret", err)
continue
}
var privateKeyJSON map[string]interface{}
err = json.Unmarshal(bytes, &privateKeyJSON)
if err != nil {
fmt.Println("Failed to parse secret", err)
continue
}
fmt.Println("Success", privateKeyJSON)
}
}
我認為問題出在這一行:
secretInfo.StringData["DecodedPrivateKeyJson"] = string(bytes)
大概應該是這樣的:
secretInfo.StringData["DecodedPrivateKeyJson"] = string(privateKeyJSON)
或者更好的事件:
marshaledPrivateKeyJSON, _ := json.Marshal(privateKeyJSON)
secretInfo.StringData["DecodedPrivateKeyJson"] = string(marshaledPrivateKeyJSON)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.