Go (Golang) / Networking and APIs in Go

Handling JSON Data in Go

This tutorial will cover how to handle JSON data in Go. We'll delve into parsing JSON data, converting Go data structures into JSON, and handling JSON responses from APIs.

Tutorial 3 of 5 5 resources in this section

Section overview

5 resources

Covers HTTP requests, RESTful APIs, and working with web services in Go.

1. Introduction

Welcome to this tutorial on handling JSON data in the Go programming language. JSON, or JavaScript Object Notation, is a lightweight data-interchange format that is easy for humans to read and write and easy for machines to parse and generate. In this tutorial, we will learn how to parse JSON data, how to convert Go data structures into JSON, and how to handle JSON responses from APIs.

By the end of this tutorial, you will be able to interact with JSON data comfortably using Go. The prerequisites for this tutorial are basic knowledge of Go and understanding of JSON.

2. Step-by-Step Guide

2.1 Parsing JSON data

To parse JSON data in Go, we use the encoding/json package's Unmarshal function. We pass it the JSON data (in bytes) and a pointer to the variable where we want to store the parsed data.

Let's see this in action:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    // JSON data in byte format
    jsonData := []byte(`{"Name":"John", "Age":30}`)

    // Map to hold the parsed data
    var parsedData map[string]interface{}

    // Parse JSON data
    json.Unmarshal(jsonData, &parsedData)

    // Print the parsed data
    fmt.Println(parsedData)
}

In the code above, we first define a byte slice containing JSON data. We then create a map to hold the parsed data. Next, we call the Unmarshal function to parse the data and pass it a pointer to our map. Finally, we print out the parsed data.

2.2 Converting Go data structures into JSON

To convert a Go data structure into JSON, we use the Marshal function from the encoding/json package. This function takes a data structure and returns its JSON representation as a byte slice.

Here's an example:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string
    Age  int
}

func main() {
    // Create a new person
    p := Person{Name: "John", Age: 30}

    // Convert person to JSON
    jsonData, _ := json.Marshal(p)

    // Print JSON data
    fmt.Println(string(jsonData))
}

In the example above, we first define a Person struct with two fields: Name and Age. We then create a new Person and use the Marshal function to convert it to JSON. Since Marshal returns a byte slice, we convert it to a string before printing it out.

2.3 Handling JSON responses from APIs

When working with APIs, we often need to send and receive JSON data. We can use the net/http package to send HTTP requests and the encoding/json package to handle the JSON data.

The following example shows how to send a GET request to an API and parse the JSON response:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "io/ioutil"
)

type User struct {
    Name string
    Age  int
}

func main() {
    // Send a GET request to the API
    resp, _ := http.Get("https://api.example.com/users/1")

    // Read the response body
    body, _ := ioutil.ReadAll(resp.Body)

    // Close the response body
    resp.Body.Close()

    // Parse the JSON response
    var user User
    json.Unmarshal(body, &user)

    // Print the user
    fmt.Println(user)
}

In this example, we first send a GET request to the API and read the response body. We then close the response body to prevent resource leaks. Finally, we parse the JSON response into a User struct and print it out.

3. Code Examples

3.1 Parsing JSON data

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    jsonData := []byte(`{"Name":"Alice", "Age":25, "Occupation":"Engineer"}`)

    var parsedData map[string]interface{}

    json.Unmarshal(jsonData, &parsedData)

    fmt.Println(parsedData)
}

Here we have JSON data which includes a new field "Occupation". We follow the same steps as before, and the output would be:

map[Age:25 Name:Alice Occupation:Engineer]

3.2 Converting Go data structures into JSON

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Name       string
    Age        int
    Department string
}

func main() {
    e := Employee{Name: "Bob", Age: 40, Department: "HR"}

    jsonData, _ := json.Marshal(e)

    fmt.Println(string(jsonData))
}

Here, we have an Employee struct that includes an additional field "Department". We convert it to JSON and print it out, and the output would be:

{"Name":"Bob","Age":40,"Department":"HR"}

4. Summary

In this tutorial, you learned how to handle JSON data in Go. We covered how to parse JSON data using json.Unmarshal, how to convert Go data structures into JSON using json.Marshal, and how to handle JSON responses from APIs.

The next steps for learning would be to familiarize yourself with more complex forms of JSON data, such as arrays and nested objects. Additionally, you could practice handling JSON data from real-world APIs.

5. Practice Exercises

  1. Write a program that sends a GET request to https://jsonplaceholder.typicode.com/users/1 and prints out the user's name.
  2. Write a program that creates a struct for a product with fields for name, price, and quantity. Convert this struct into JSON and print it out.
  3. Write a program that parses the JSON data {"employees":[{"firstName":"John", "lastName":"Doe"},{"firstName":"Anna", "lastName":"Smith"},{"firstName":"Peter", "lastName":"Jones"}]} and prints out the first names of all employees.

Happy coding!

Need Help Implementing This?

We build custom systems, plugins, and scalable infrastructure.

Discuss Your Project

Related topics

Keep learning with adjacent tracks.

View category

HTML

Learn the fundamental building blocks of the web using HTML.

Explore

CSS

Master CSS to style and format web pages effectively.

Explore

JavaScript

Learn JavaScript to add interactivity and dynamic behavior to web pages.

Explore

Python

Explore Python for web development, data analysis, and automation.

Explore

SQL

Learn SQL to manage and query relational databases.

Explore

PHP

Master PHP to build dynamic and secure web applications.

Explore

Popular tools

Helpful utilities for quick tasks.

Browse tools

Percentage Calculator

Easily calculate percentages, discounts, and more.

Use tool

PDF Splitter & Merger

Split, merge, or rearrange PDF files.

Use tool

Base64 Encoder/Decoder

Encode and decode Base64 strings.

Use tool

PDF to Word Converter

Convert PDF files to editable Word documents.

Use tool

Fake User Profile Generator

Generate fake user profiles with names, emails, and more.

Use tool

Latest articles

Fresh insights from the CodiWiki team.

Visit blog

AI in Drug Discovery: Accelerating Medical Breakthroughs

In the rapidly evolving landscape of healthcare and pharmaceuticals, Artificial Intelligence (AI) in drug dis…

Read article

AI in Retail: Personalized Shopping and Inventory Management

In the rapidly evolving retail landscape, the integration of Artificial Intelligence (AI) is revolutionizing …

Read article

AI in Public Safety: Predictive Policing and Crime Prevention

In the realm of public safety, the integration of Artificial Intelligence (AI) stands as a beacon of innovati…

Read article

AI in Mental Health: Assisting with Therapy and Diagnostics

In the realm of mental health, the integration of Artificial Intelligence (AI) stands as a beacon of hope and…

Read article

AI in Legal Compliance: Ensuring Regulatory Adherence

In an era where technology continually reshapes the boundaries of industries, Artificial Intelligence (AI) in…

Read article

Need help implementing this?

Get senior engineering support to ship it cleanly and on time.

Get Implementation Help