簡體   English   中英

如何在 Go 中解碼 base64 編碼的 JSON

[英]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。

我錯過了什么?

上面的代碼中似乎存在一些問題

  1. 您忽略了解碼錯誤
  2. 您尚未提供有關如何解析機密信息的代碼

添加少數情況下的示例代碼,希望有幫助:)

包主

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

去游樂場

更新了相同的代碼以使用 []Byte 以提供更清晰的信息

我認為問題出在這一行:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM