我有一张 map[string][]byte
类型的 map ,现在是 []byte
的值是base64编码的。
有一个 JSON 编码在其中 []byte
我想进一步使用。现在我这样做是为了解码 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)
}
}
Go PlaygroundUpdated same code to use []Byte to provide more clarity
关于json - 如何在 Go 中解码 base64 编码的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63593441/