Sé libre de divulgar nuestra página y códigos en tus redes sociales, apóyanos para aumentar esta comunidad.
Solución:
Es posible que desee utilizar strconv.Unquote
en tu JSON string primero 🙂
Aquí hay un ejemplo, proporcionado amablemente por @gregghz:
package main
import (
"encoding/json"
"fmt"
"strconv"
)
type Msg struct
Channel string
Name string
Msg string
func main()
var msg Msg
var val []byte = []byte(`""channel":"buu","name":"john", "msg":"doe""`)
s, _ := strconv.Unquote(string(val))
err := json.Unmarshal([]byte(s), &msg)
fmt.Println(s)
fmt.Println(err)
fmt.Println(msg.Channel, msg.Name, msg.Msg)
Debe corregir esto en el código que genera el JSON.
Cuando resulta formateado de esa manera, se está codificando JSON dos veces. Arregle ese código que está generando para que solo suceda una vez.
Aquí hay algo de JavaScript que muestra lo que está pasando.
// Start with an object
var object = "channel":"buu","name":"john", "msg":"doe";
// serialize once
var json = JSON.stringify(object); // "channel":"buu","name":"john","msg":"doe"
// serialize twice
json = JSON.stringify(json); // ""channel":"buu","name":"john","msg":"doe""
Como señaló Crazy Train, parece que su entrada es doblemente escapada, lo que causa el problema. Una forma de solucionar esto es asegurarse de que la función session.ReadMessasge()
devuelve la salida adecuada que se escapa adecuadamente. Sin embargo, si eso no es posible, siempre puede hacer lo que sugirió x3ro y usar la función golang strconv.Unquote
.
Aquí hay un ejemplo de patio de recreo en acción:
http://play.golang.org/p/GTishI0rwe