Saltar al contenido

Cómo descomponer un JSON escapado string

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

Reseñas y valoraciones de la guía

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *