Esta pagina se ve mejor con JavaScript habilitado

Utilizando json.RawMessage

 ·  ☕ 2 minutos lectura  ·  ✍️ Saturnino Pimentel

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:

1
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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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 .

compartir en

Saturnino Pimentel
Escrito por
Saturnino Pimentel
Software developer