Utilizando json.RawMessage
Hoy en día es común trabajar con archivos en formato json
, en general al trabajar con estos archivos se utilizan estructuras completas para realizar un unmarshal
de la información pero en ciertas ocasiones se desea mantener la información de ciertos campos sin necesidad de realizar ese proceso, para estos escenarios en muchos casos se termina optando por utilizar interface{}
pero si posteriormente se desea manipular la información esto suele ser un poco más complicado.
Afortunadamente Go ofrece el tipo json.RawMessage
, al buscar la definición de este tipo notarás que es un type definition
como el siguiente:
type RawMessage []byte
Al ser un arreglo de bytes se puede acceder fácilmente a la información que contiene en caso de ser necesario, bien ahora veamos un ejemplo de cómo puede ser utilizado.
package main
import (
"encoding/json"
"fmt"
)
type Group struct {
Id string
Name string
People json.RawMessage
}
func main() {
rm := json.RawMessage(`[{
"id":123612736,
"name":"name1",
"last_name":"last_name1"
},{
"id":98543985,
"name":"name1",
"last_name":"last_name2"
}]`)
grp := Group{
Id: "group1",
Name: "group_name1",
People: rm,
}
json, err := json.Marshal(grp)
if err != nil {
fmt.Print(err.Error())
}
fmt.Print(string(json))
}
Puedes validar el comportamiento del código en el siguiente link .