en Golang, ¿cuál es la diferencia entre la codificación json y la clasificación
(3)
En general, la codificación / decodificación JSON
refiere al proceso de leer / escribir los datos de caracteres en una cadena o forma binaria. Marshaling / Unmarshaling se refiere al proceso de mapeo de tipos JSON
desde y hacia tipos de datos y primitivas de Go
.
La codificación real puede incluir cosas como la serialización de caracteres Unicode, por ejemplo. Creo que a veces se pueden usar indistintamente en la documentación porque generalmente ocurren en el mismo paso. La función Marshal, por ejemplo, determinará a qué tipo de JSON se debe asignar algo y luego se codificará en forma de cadena (que puede incluir otros detalles, como caracteres especiales, si se trata de datos textuales).
Puede consultar los documentos del paquete go json para obtener más detalles sobre cómo funcionan los pasos de unmarshaling / unmarshaling .
¿Cuál es la diferencia entre JSON ''codificación / decodificación'' y JSON ''marshalling / unmarshalling''?
¿Tratar de aprender cómo escribir una api RESTFUL en golang y no estar seguro de cuál es la diferencia entre JSON ''codificación'' y ''clasificación'' o si son la misma?
func Encode es un método en un codificador, que escribe los tipos de Go codificados en JSON en una secuencia de salida (la función NewEncoder toma un io.Writer y devuelve un * Codificador).
Los tipos de Go entran en el cuadro negro y se escriben en la secuencia en formato JSON.
Marshal es una función que devuelve la codificación JSON de los tipos Go.
Aquí sus tipos Go ingresan a la caja negra y salen de la caja en formato JSON.
Está bien documentado en: golang.org/pkg/encoding/json/
- Mariscal => cadena
- Encode => Stream
Marshal y Unmarshal convierten JSON en una cadena y viceversa. La codificación y la decodificación convierten JSON en una secuencia y viceversa.
El siguiente código muestra el funcionamiento de Marshal y Unmarshal.
type Person struct {
First string
Last string
}
func main() {
/* This will marshal the JSON into []bytes */
p1 := Person{"alice", "bob"}
bs, _ := json.Marshal(p1)
fmt.Println(string(bs))
/* This will unmarshal the JSON from []bytes */
var p2 Person
bs = []byte(`{"First":"alice","Last":"bob"}`)
json.Unmarshal(bs, &p2)
fmt.Println(p2)
}
El codificador y el decodificador escriben la estructura para dividir un flujo o leen datos de un segmento de un flujo y lo convierten en una estructura. Internamente, también implementa el método marshal. La única diferencia es que si quieres jugar con una cadena o bytes, usa Marshal y si algún dato quieres leer o escribir en alguna interfaz de escritor, usa codificaciones y decodifica.