Open In App

Basics of JSON with GoLang

Improve
Improve
Like Article
Like
Save
Share
Report

JSON is a widely used format for data interchange. Golang provides multiple encoding and decoding APIs to work with JSON including to and from built-in and custom data types using the encoding/json package. 

Data Types: The default Golang data types for decoding and encoding JSON are as follows: 

  • bool for JSON booleans
  • float64 for JSON numbers
  • string for JSON strings
  • nil for JSON null
  • array as JSON array
  • map or struct as JSON Object

1. Encoding/Marshalling structs: The Marshal() function in package encoding/json is used to encode the data into JSON. 

Syntax: func Marshal(v interface{}) ([]byte, error)

Example: 

Go




// Golang program to illustrate the
// concept of encoding using JSON
package main
    
import (
    "fmt"
    "encoding/json"
)
    
// declaring a struct
type Human struct{
        
    // defining struct variables
    Name string
    Age int
    Address string
}
    
// main function
func main() {
        
    // defining a struct instance
    human1 := Human{"Ankit", 23, "New Delhi"}
        
    // encoding human1 struct
    // into json format
    human_enc, err := json.Marshal(human1)
        
    if err != nil {
            
        // if error is not nil
        // print error
        fmt.Println(err)
    }
        
    // as human_enc is in a byte array
    // format, it needs to be 
    // converted into a string 
    fmt.Println(string(human_enc))
        
    // converting slices from
    // golang to JSON format
        
    // defining an array
    // of struct instance
    human2 := []Human{
        {Name: "Rahul", Age: 23, Address: "New Delhi"},
        {Name: "Priyanshi", Age: 20, Address: "Pune"},
        {Name: "Shivam", Age: 24, Address: "Bangalore"},
    }
        
    // encoding into JSON format
    human2_enc, err := json.Marshal(human2)
         
        if err != nil {
        
        // if error is not nil
        // print error
            fmt.Println(err)
        }
            
    // printing encoded array
    fmt.Println()
        fmt.Println(string(human2_enc))
}


Output: 

{"Name":"Ankit", "Age":23, "Address":"New Delhi"}

[{"Name":"Rahul", "Age":23, "Address":"New Delhi"}, {"Name":"Priyanshi", "Age":20, "Address":"Pune"}, {"Name":"Shivam", "Age":24, "Address":"Bangalore"}]

2. Decoding/Unmarshalling structs: The Unmarshal() function in package encoding/json is used to unpack or decode the data from JSON to struct.  

Syntax: func Unmarshal(data []byte, v interface{}) error

Example: 

Go




// Golang program to illustrate the
// concept of decoding using JSON
package main
    
import (
    "fmt"
    "encoding/json"
)
    
// declaring a struct
type Human struct{
        
    // defining struct variables
    Name string
    Address string
    Age int
}
    
// main function
func main() {
        
    // defining a struct instance
    var human1 Human
        
    // data in JSON format which
    // is to be decoded
    Data := []byte(`{
        "Name": "Deeksha",  
        "Address": "Hyderabad",
        "Age": 21
    }`)
        
    // decoding human1 struct
    // from json format
    err := json.Unmarshal(Data, &human1)
        
    if err != nil {
            
        // if error is not nil
        // print error
            fmt.Println(err)
    }
        
    // printing details of
    // decoded data 
    fmt.Println("Struct is:", human1)
    fmt.Printf("%s lives in %s.\n", human1.Name, human1.Address)
        
    // unmarshalling a JSON array
    // to array type in Golang
        
    // defining an array instance
    // of struct type
    var human2 []Human
        
    // JSON array to be decoded
    // to an array
    Data2 := []byte(`
    [
        {"Name": "Vani", "Address": "Delhi", "Age": 21},
        {"Name": "Rashi", "Address": "Noida", "Age": 24},
        {"Name": "Rohit", "Address": "Pune", "Age": 25}
    ]`)
        
    // decoding JSON array to 
    // human2 array
    err2 := json.Unmarshal(Data2, &human2)
        
        if err2 != nil {
        
        // if error is not nil
        // print error
            fmt.Println(err2)
        }
        
    // printing decoded array 
    // values one by one
    for i := range human2{
        
        fmt.Println(human2[i])
    }
}


Output:

Struct is: {Deeksha Hyderabad 21}
Deeksha lives in Hyderabad.
{Vani Delhi 21}
{Rashi Noida 24}
{Rohit Pune 25}

 



Last Updated : 31 May, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads