English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Go tiene soporte integrado para codificación y decodificación de JSON. También admite tipos de datos personalizados.
La función Marshal se utiliza para convertir tipos de datos de go en formato JSON.
La sintaxis de la función Marshal es:
"func Marshal(v interface{}) ([]byte, error)"
Marshal devuelve el código JSON del valor v.
Los valores booleanos se convierten en valores booleanos JSON. Los números flotantes, enteros y numéricos se convierten en números JSON. Los tipos de clave de Map deben ser cadenas, enteros o implementar encoding.TextMarshaler.
La deserialización de JSON se realiza utilizando la función Unmarshal.
La sintaxis de la función Unmarshal es:
"func Unmarshal(data []byte, v interface{}) error"
Unmarshal deserializa el valor codificado en JSON y lo almacena en el valor apuntado por v. Si v es nil o no es un puntero, Unmarshal devuelve InvalidUnmarshalError.
También podemos personalizar los campos almacenados en la etiqueta del campo struct bajo la clave "json". Podemos usar el nombre del campo, seguido de una lista de opciones separadas por comas.
Field int 'json:"myName"' // Se muestra en JSON como la clave "myName"。 Field int 'json:"myName,omitempty?'//Si el valor de este campo está vacío, se omite este campo del objeto。 Field int 'json:"-"" ////El campo se ignora por este paquete。
package main import "encoding"/json" import "fmt" func main() { bolType, _ := json.Marshal(false) //valor de booleano fmt.Println(string(bolType)) intType, _ := json.Marshal(10) // valor de entero fmt.Println(string(intType)) fltType, _ := json.Marshal(3.14) //valor de flotante fmt.Println(string(fltType)) strType, _ := json.Marshal("w"3codebox") // valor de cadena fmt.Println(string(strType)) slcA := []string{"sol", "luna", "estrella"} //valor de lista slcB, _ := json.Marshal(slcA) fmt.Println(string(slcB)) mapA := map[string]int{"sol": 1, "luna": 2} //valor de mapa mapB, _ := json.Marshal(mapA) fmt.Println(string(mapB)) }
salida:
false 10 3.14 "w"3codebox" ["sol","luna","estrella"] {"luna":2,"sol":1}
package main import (" "encoding"/json" "fmt" "os" ) type Response1 struct { Position int Planet []string } type Response2 struct { Position int 'json:"position"' Planeta []string 'json:"planet"' } func main() { res1A := &Response1{ Posición: 1, Planeta: []string{"mercury", "venus", "earth"}} res1B, _ := json.Marshal(res1A) fmt.Println(string(res1B)) res2D := &Response2{ Posición: 1, Planeta: []string{"mercury", "venus", "earth"}} res2B, _ := json.Marshal(res2D) fmt.Println(string(res2B)) byt := []byte('{"pi":6.13,"place":["New York","New Delhi"]}`) var dat map[string]interface{} if err := json.Unmarshal(byt, &dat); err != nil { panic(err) } fmt.Println(dat) num := dat["pi"].(float64) fmt.Println(num) strs := dat["place"].([]interface{}) str1 := strs[0].(string) fmt.Println(str1) str := `{"Position": 1, "Planet": ["mercury", "venus"]}` res := Response2{} json.Unmarshal([]byte(str), &res) fmt.Println(res) fmt.Println(res.Planet[1]) enc := json.NewEncoder(os.Stdout) d := map[string]string{"1: "mercury" , "2: "venus"} enc.Encode(d) }
salida:
{"Position":1,"Planet":["mercury","venus","earth"]} {"position":1,"planet":["mercury","venus","earth"]} map[pi:6.13 place:[New York New Delhi]] 6.13 New York {1 [mercury venus]} venus {"1"mercury","2:"venus"