Go (Golang) / Go Data Structures

Parsing and Generating JSON in Go

This tutorial will cover how to work with JSON data in Go. We'll specifically look at how to parse JSON data from a string and how to generate JSON data from Go structs.

Tutorial 4 of 5 5 resources in this section

Section overview

5 resources

Covers essential data structures in Go, including arrays, slices, and maps.

Parsing and Generating JSON in Go

1. Introduction

This tutorial aims to guide you through the process of parsing JSON data from a string and generating JSON data from Go structs. By the end of this tutorial, you will have a solid understanding of how to work with JSON in Go.

What You Will Learn

  • Parse JSON strings into Go data structures
  • Generate JSON strings from Go data structures

Prerequisites

  • Basic understanding of Go programming language
  • Familiarity with JSON format

2. Step-by-Step Guide

JSON (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. Go provides built-in support for JSON encoding and decoding.

Parsing JSON in Go

In Go, the encoding/json package provides functionality to work with JSON data. To parse JSON data, you can use the json.Unmarshal function. This function takes two arguments: the JSON data to parse and a reference to the variable where the parsed data should be stored.

Here's an example:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string 
    Age  int    
}

func main() {
    jsonData := `{"Name":"John", "Age":30}`

    var person Person
    json.Unmarshal([]byte(jsonData), &person)

    fmt.Println(person.Name, person.Age) // Output: John 30
}

Generating JSON in Go

To generate JSON data, you can use the json.Marshal function. This function takes one argument: the data you want to convert to JSON. json.Marshal returns the JSON encoding of the input value.

Here's an example:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string 
    Age  int    
}

func main() {
    person := Person{"John", 30}

    jsonData, _ := json.Marshal(person)

    fmt.Println(string(jsonData)) // Output: {"Name":"John","Age":30}
}

3. Code Examples

Let's look at a few more examples to better understand parsing and generating JSON data in Go.

Parsing JSON Array in Go

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string 
    Age  int    
}

func main() {
    jsonData := `[{"Name":"John", "Age":30}, {"Name":"Jane", "Age":25}]`

    var persons []Person
    json.Unmarshal([]byte(jsonData), &persons)

    for _, person := range persons {
        fmt.Println(person.Name, person.Age)
    }
    // Output: 
    // John 30
    // Jane 25
}

In the above example, we parse a JSON array into a slice of Person structs.

Generating JSON Array in Go

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string 
    Age  int    
}

func main() {
    persons := []Person{{"John", 30}, {"Jane", 25}}

    jsonData, _ := json.Marshal(persons)

    fmt.Println(string(jsonData)) 
    // Output: [{"Name":"John","Age":30},{"Name":"Jane","Age":25}]
}

In the above example, we generate a JSON array from a slice of Person structs.

4. Summary

In this tutorial, we've learned how to parse and generate JSON data in Go. We have used the json.Unmarshal function to parse JSON data into Go structs and the json.Marshal function to generate JSON data from Go structs.

Next steps for learning could involve working with more complex JSON structures or learning about more advanced features of the encoding/json package. You might also want to explore other data formats that Go can work with.

5. Practice Exercises

  1. Write a Go program that parses a JSON string into a map.

Solution:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    jsonData := `{"Name":"John", "Age":30}`

    var person map[string]interface{}
    json.Unmarshal([]byte(jsonData), &person)

    fmt.Println(person["Name"], person["Age"]) // Output: John 30
}
  1. Write a Go program that generates a JSON string from a map.

Solution:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    person := map[string]interface{}{"Name": "John", "Age": 30}

    jsonData, _ := json.Marshal(person)

    fmt.Println(string(jsonData)) // Output: {"Age":30,"Name":"John"}
}
  1. Write a Go program that parses a complex JSON string into a nested struct.

Solution:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string 
    Age  int    
    Address struct {
        Street string
        City   string
    }
}

func main() {
    jsonData := `{"Name":"John", "Age":30, "Address": {"Street": "123 Main St", "City": "New York"}}`

    var person Person
    json.Unmarshal([]byte(jsonData), &person)

    fmt.Println(person.Name, person.Age, person.Address.Street, person.Address.City) 
    // Output: John 30 123 Main St New York
}
  1. Write a Go program that generates a complex JSON string from a nested struct.

Solution:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string 
    Age  int    
    Address struct {
        Street string
        City   string
    }
}

func main() {
    person := Person{
        Name: "John",
        Age:  30,
        Address: struct {
            Street string
            City   string
        }{
            Street: "123 Main St",
            City:   "New York",
        },
    }

    jsonData, _ := json.Marshal(person)

    fmt.Println(string(jsonData)) 
    // Output: {"Name":"John","Age":30,"Address":{"Street":"123 Main St","City":"New York"}}
}

Remember to always practice with different JSON structures and scenarios to become more proficient in parsing and generating JSON in Go.

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

PDF Password Protector

Add or remove passwords from PDF files.

Use tool

Word Counter

Count words, characters, sentences, and paragraphs in real-time.

Use tool

WHOIS Lookup Tool

Get domain and IP details with WHOIS lookup.

Use tool

Percentage Calculator

Easily calculate percentages, discounts, and more.

Use tool

Timestamp Converter

Convert timestamps to human-readable dates.

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