codingstuff.io
ExploreTutorialsProblemsCS Subjects
Get Started
ExploreTutorialsProblemsCS Subjects
Get Started
codingstuff.io

Master the art of building software through interactive tutorials, real-world problems, and guided projects.

Pune, Maharashtra, India

codingstuffmail@gmail.com

Product

  • Explore
  • Tutorials
  • Problems
  • CS Subjects

Company

  • About
  • Contact
  • Privacy Policy
  • Terms & Conditions
  • Sitemap

© 2026 codingstuff.io. All rights reserved.

Built with ❤️ for developers everywhere

/
/
All Tutorials
🐹

Go (Golang)

31 / 72 topics
27Standard Library Overview28IO Package29Net Package30HTTP Package31JSON Package32XML Package33Time Package34OS Package35Fmt Package36Math Package37Regexp Package38Log Package39Flag Package40Context Package41Embed Package
Tutorials/Go (Golang)/JSON Package
🐹Go (Golang)

JSON Package

Updated 2026-05-15
10 min read

JSON Package

Introduction

In the world of programming, handling JSON (JavaScript Object Notation) is a common task. JSON is a lightweight data-interchange format that is easy for humans to read and write, and easy for machines to parse and generate. Go, also known as Golang, provides built-in support for working with JSON through its encoding/json package.

This tutorial will guide you through the basics of using the encoding/json package in Go to encode (serialize) and decode (deserialize) JSON data. We'll cover both simple and complex scenarios, ensuring that you have a solid understanding of how to work with JSON in Go.

Concept

The encoding/json package in Go provides functions for encoding and decoding JSON data. Here are the key functions we will use:

  • json.Marshal: Converts a Go value into a JSON-encoded byte slice.
  • json.Unmarshal: Parses a JSON-encoded byte slice and stores the result in the value pointed to by v.

Encoding JSON

Encoding JSON involves converting a Go data structure (like a struct or map) into a JSON string. This is useful when you need to send data over a network or save it to a file.

Decoding JSON

Decoding JSON involves parsing a JSON string and populating a Go data structure with the parsed values. This is useful when you receive data from a network or read it from a file.

Examples

Let's dive into some practical examples to illustrate how to work with JSON in Go.

Example 1: Encoding a Simple Struct

First, let's define a simple struct and encode it into JSON.

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	person := Person{Name: "John Doe", Age: 30}
	jsonData, err := json.Marshal(person)
	if err != nil {
		fmt.Println("Error encoding JSON:", err)
		return
	}
	fmt.Println(string(jsonData))
}

In this example, we define a `Person` struct with two fields: `Name` and `Age`. We then create an instance of `Person`, encode it into JSON using `json.Marshal`, and print the resulting JSON string.

### Example 2: Decoding a Simple Struct

Next, let's decode a JSON string back into a Go struct.

```go
package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	jsonString := `{"name":"John Doe","age":30}`
	var person Person
	err := json.Unmarshal([]byte(jsonString), &person)
	if err != nil {
		fmt.Println("Error decoding JSON:", err)
		return
	}
	fmt.Printf("Name: %s, Age: %d\n", person.Name, person.Age)
}

In this example, we define a `Person` struct and a JSON string. We then decode the JSON string into an instance of `Person` using `json.Unmarshal` and print the decoded values.

### Example 3: Handling Complex Data Structures

Let's look at how to handle more complex data structures, such as nested structs and slices.

```go
package main

import (
	"encoding/json"
	"fmt"
)

type Address struct {
	City    string `json:"city"`
	State   string `json:"state"`
	Country string `json:"country"`
}

type Person struct {
	Name    string  `json:"name"`
	Age     int     `json:"age"`
	Address Address `json:"address"`
	Hobbies []string `json:"hobbies"`
}

func main() {
	person := Person{
		Name: "John Doe",
		Age:  30,
		Address: Address{
			City:    "New York",
			State:   "NY",
			Country: "USA",
		},
		Hobbies: []string{"reading", "traveling"},
	}

	jsonData, err := json.Marshal(person)
	if err != nil {
		fmt.Println("Error encoding JSON:", err)
		return
	}
	fmt.Println(string(jsonData))

	var decodedPerson Person
	err = json.Unmarshal([]byte(string(jsonData)), &decodedPerson)
	if err != nil {
		fmt.Println("Error decoding JSON:", err)
		return
	}
	fmt.Printf("Name: %s, Age: %d, City: %s\n", decodedPerson.Name, decodedPerson.Age, decodedPerson.Address.City)
}

In this example, we define a `Person` struct with nested `Address` and a slice of hobbies. We encode the `Person` instance into JSON and then decode it back into a new `Person` instance.

### Example 4: Handling Custom Types

Sometimes you might need to handle custom types that require special encoding or decoding logic.

```go
package main

import (
	"encoding/json"
	"fmt"
)

type Age int

func (a *Age) UnmarshalJSON(data []byte) error {
	var age int
	err := json.Unmarshal(data, &age)
	if err != nil {
		return err
	}
	if age < 0 || age > 120 {
		return fmt.Errorf("invalid age: %d", age)
	}
	*a = Age(age)
	return nil
}

type Person struct {
	Name string `json:"name"`
	Age  Age    `json:"age"`
}

func main() {
	jsonString := `{"name":"John Doe","age":30}`
	var person Person
	err := json.Unmarshal([]byte(jsonString), &person)
	if err != nil {
		fmt.Println("Error decoding JSON:", err)
		return
	}
	fmt.Printf("Name: %s, Age: %d\n", person.Name, person.Age)
}

In this example, we define a custom Age type and implement the UnmarshalJSON method to add validation logic. We then use this custom type in a Person struct.

Conclusion

The encoding/json package in Go provides powerful tools for working with JSON data. Whether you need to encode simple structs or handle complex nested structures, Go's built-in support makes it easy to work with JSON efficiently.

By following the examples provided in this tutorial, you should have a good understanding of how to encode and decode JSON data in Go. As you continue to develop your Go applications, remember that the encoding/json package is a valuable resource for handling JSON data seamlessly.


PreviousHTTP PackageNext XML Package

Recommended Gear

HTTP PackageXML Package