JSON (JavaScript Object Notation) is a popular data interchange format that is easy for humans to read and write, and also, easy for machines to parse and generate. Go programming language provides a comprehensive set of packages that make it effortless to encode and decode JSON data.
Go's standard library encoding/json
package provides the Marshal
function, which allows converting Go data structures into JSON-encoded byte slices.
Here's a simple example that demonstrates how to encode a Go structure into JSON:
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
p := Person{Name: "John Doe", Age: 30}
jsonData, err := json.Marshal(p)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(jsonData))
In this example, we define a Person
struct with two fields: Name
of type string
and Age
of type int
. By adding tags like json:"name"
and json:"age"
to the struct fields, we can specify the key names in the JSON output.
The Marshal
function converts the Person
struct into a JSON-encoded byte slice. To convert it into a string, we use fmt.Println(string(jsonData))
. The output will be:
{"name":"John Doe","age":30}
Go also provides the Unmarshal
function in the encoding/json
package, which allows decoding JSON data into Go data structures.
Here's an example that demonstrates how to decode JSON data:
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
jsonString := `{"name":"Jane Smith","age":28}`
var p Person
err := json.Unmarshal([]byte(jsonString), &p)
if err != nil {
log.Fatal(err)
}
fmt.Println(p.Name)
fmt.Println(p.Age)
In this example, we define a JSON string representation of a person with their name and age. We create a Person
variable p
and use the Unmarshal
function to decode the JSON string into the p
variable.
After decoding, we can access the Name
and Age
fields of the p
variable, giving us the flexibility to work with Go data structures.
The output will be:
Jane Smith
28
JSON encoding and decoding in Go also handle nested structures effortlessly. Let's see an example:
type Address struct {
City string `json:"city"`
State string `json:"state"`
}
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Address Address `json:"address"`
}
p := Person{
Name: "John Doe",
Age: 30,
Address: Address{
City: "New York",
State: "NY",
},
}
jsonData, err := json.Marshal(p)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(jsonData))
In this example, we define a nested structure with Address
inside the Person
struct. We populate the fields accordingly and encode the Person
struct into a JSON string.
The output will be:
{"name":"John Doe","age":30,"address":{"city":"New York","state":"NY"}}
JSON encoding and decoding in Go is a straightforward process, thanks to the encoding/json
package. We can convert Go data structures into JSON-encoded byte slices using the Marshal
function, and decode JSON data into Go data structures using the Unmarshal
function. The package also seamlessly handles nested structures, making it a powerful tool for working with JSON data in Go.
noob to master © copyleft