English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial básico de Golang

Sentencias de control de Golang

Funciones & Métodos de Golang

Estructuras de Golang

Cortes & Arreglos de Golang

Cadenas (String) de Golang

Punteros de Golang

Interfaces de Golang

Concurrencia de Golang

Excepciones de Golang (Error)

Otros temas de Golang

JSON del lenguaje Go

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。

Ejemplo de Go JSON1

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}

Ejemplo de Go JSON2(用户定义的数据类型)

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"