Rumah >pembangunan bahagian belakang >Golang >Mengapakah menggabungkan nilai json.RawMessage menghasilkan rentetan berkod base64 dan bukannya JSON mentah?

Mengapakah menggabungkan nilai json.RawMessage menghasilkan rentetan berkod base64 dan bukannya JSON mentah?

DDD
DDDasal
2024-11-12 04:54:01801semak imbas

Why does marshalling a json.RawMessage value result in a base64-encoded string instead of raw JSON?

Marshalling json.RawMessage Mengembalikan Rentetan Berkod Base64

Soalan:

Apabila menyusun a json.RawMessage nilai, mengapa output rentetan berkod base64 dan bukannya JSON mentah?

Latar Belakang:

Kod di bawah menunjukkan isu:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    raw := json.RawMessage(`{"foo":"bar"}`)
    j, err := json.Marshal(raw)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(j))  
}

Dijangka Output:

{"foo":"bar"}

Sebenar Output:

"eyJmb28iOiJiYXIifQ=="

Jawapan:

Kaedah MarshalJSON jenis json.RawMessage hanya mengembalikan kepingan bait asas. Walau bagaimanapun, untuk json.RawMessage berfungsi dengan betul, nilai yang dihantar kepada json.Marshal mestilah penunjuk.

Penyelesaian:

Untuk menyelesaikan isu, kemas kini kod seperti berikut:

j, err := json.Marshal(&raw)

Atas ialah kandungan terperinci Mengapakah menggabungkan nilai json.RawMessage menghasilkan rentetan berkod base64 dan bukannya JSON mentah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn