2014-06-15 10 views
12

I den folgenden Code:Rangierung json.RawMessage kehrt Base64 codierte Zeichenfolge

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

Spielplatz:http://play.golang.org/p/qbkEIZRTPQ

Output:

"eyJmb28iOiJiYXIifQ==" 

gewünschte Ausgabe:

{"foo":"bar"} 

Warum Base64 es kodieren meine RawMessage, als wäre es ein gewöhnlicher []byte war?

Immerhin kehrt RawMessage Implementierung von MarshalJSON nur die Byte-Scheibe

// MarshalJSON returns *m as the JSON encoding of m. 
func (m *RawMessage) MarshalJSON() ([]byte, error) { 
    return *m, nil 
} 

Antwort

29

die Antwort in einem zu json.Marshal geben

Der Wert

go-nuts thread Gefunden ein Zeiger sein muss für json.RawMessage richtig funktioniert:

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

Wie kann ich seinen Schlüssel und Wert von j Variable verwenden? –

+0

@RockBalbao 'j' ist die JSON-codierte Zeichenfolge. Um auf die Werte zuzugreifen, müssen Sie [json.Unmarshal] (https://golang.org/pkg/encoding/json/#Unmarshal) verwenden. – ANisus

Verwandte Themen