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

DDD
Lepaskan: 2024-11-12 04:54:01
asal
773 orang telah melayarinya

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))  
}
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan