Working With JSON & XML in Go

List Topics
February 18, 2025
No Comments
6 min read

In Go, JSON and XML are common data interchange formats. The encoding/json and encoding/xml packages are used to work with these formats. These packages allow you to parse, encode, and decode JSON and XML data. Below, we will look at examples of working with both JSON and XML in Go.

1️⃣ Working with JSON

JSON (JavaScript Object Notation) is a popular data format used for data exchange. In Go, the encoding/json package is used to work with JSON data.

JSON Parsing

To read JSON data and convert it into a Go struct, we use json.Unmarshal.

🔹 Example: Parsing JSON into a Struct

Go
package main

import (
    "encoding/json"
    "fmt"
)

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

func main() {
    // JSON data
    jsonData := `{"name": "Alice", "age": 30}`

    var p Person

    // Parse JSON data into a struct
    err := json.Unmarshal([]byte(jsonData), &p)
    if err != nil {
        fmt.Println("Error parsing JSON:", err)
        return
    }

    // Print the parsed data
    fmt.Println("Name:", p.Name)
    fmt.Println("Age:", p.Age)
}

🔹 Output:

Bash
Name: Alice
Age: 30

👉 In this example:

  • json.Unmarshal converts the JSON data string into a Go struct.
  • The struct fields are mapped to the JSON keys using the json:"name" tag.

JSON Encoding

To convert a Go struct into JSON data, we use json.Marshal.

🔹 Example: Encoding a Struct into JSON

Go
package main

import (
    "encoding/json"
    "fmt"
)

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

func main() {
    p := Person{Name: "Bob", Age: 25}

    // Convert struct to JSON
    jsonData, err := json.Marshal(p)
    if err != nil {
        fmt.Println("Error encoding JSON:", err)
        return
    }

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

🔹 Output:

Bash
{"name":"Bob","age":25}

👉 Here:

  • json.Marshal converts the Go struct into JSON format.
  • The keys in the JSON output match the struct tags (json:"name").

2️⃣ Working with XML

Go also provides support for XML through the encoding/xml package, similar to JSON. You can use this package to parse and encode XML data.

XML Parsing

To read XML data and convert it into a Go struct, we use xml.Unmarshal.

🔹 Example: Parsing XML into a Struct

Go
package main

import (
    "encoding/xml"
    "fmt"
)

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

func main() {
    // XML data
    xmlData := `<Person><name>Alice</name><age>30</age></Person>`

    var p Person

    // Parse XML data into a struct
    err := xml.Unmarshal([]byte(xmlData), &p)
    if err != nil {
        fmt.Println("Error parsing XML:", err)
        return
    }

    // Print the parsed data
    fmt.Println("Name:", p.Name)
    fmt.Println("Age:", p.Age)
}

🔹 Output:

Bash
Name: Alice
Age: 30

👉 In this example:

  • xml.Unmarshal converts the XML data string into a Go struct.
  • The struct fields are mapped to the XML tags using the xml:"name" tag.

XML Encoding

To convert a Go struct into XML data, we use xml.Marshal.

🔹 Example: Encoding a Struct into XML

Go
package main

import (
    "encoding/xml"
    "fmt"
)

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

func main() {
    p := Person{Name: "Bob", Age: 25}

    // Convert struct to XML
    xmlData, err := xml.Marshal(p)
    if err != nil {
        fmt.Println("Error encoding XML:", err)
        return
    }

    // Print the XML data
    fmt.Println(string(xmlData))
}

🔹 Output:

Bash
<Person><name>Bob</name><age>25</age></Person>

👉 Here:

  • xml.Marshal converts the Go struct into XML format.
  • The XML tags are specified using the xml:"name" tag.

3️⃣ Difference Between JSON and XML

  • JSON: Lightweight, compact, and human-readable. It is commonly used in web services.
  • XML: More verbose and can handle more complex, structured data. It is often used in legacy systems and certain databases.

Summary:

  • In Go, JSON and XML can be parsed and encoded using the encoding/json and encoding/xml packages.
  • To convert data from JSON/XML into Go structs, you use json.Unmarshal/xml.Unmarshal.
  • To convert Go structs into JSON/XML data, you use json.Marshal/xml.Marshal.
  • Struct fields are associated with the corresponding JSON/XML keys/tags using json:"name" and xml:"name" tags.

This is how Go allows efficient and effective handling of both JSON and XML data formats.


Go তে JSON & XML এর সাথে কাজ করা

Go তে JSON এবং XML ডাটা ফরম্যাটের সাথে কাজ করার জন্য encoding/json এবং encoding/xml প্যাকেজগুলি ব্যবহার করা হয়। এই প্যাকেজগুলি আপনাকে JSON এবং XML ডাটা পার্স, এনকোড, এবং ডিকোড করতে সাহায্য করে। নিচে আমরা JSON এবং XML এর সাথে কাজ করার জন্য কিছু উদাহরণ দেখব।

1️⃣ JSON এর সাথে কাজ করা

JSON (JavaScript Object Notation) একটি জনপ্রিয় ডাটা এক্সচেঞ্জ ফরম্যাট। Go তে JSON এর সাথে কাজ করার জন্য encoding/json প্যাকেজটি ব্যবহৃত হয়।

JSON পার্স (JSON Parsing)

JSON ডাটা পড়তে এবং Go এর স্ট্রাক্টে কনভার্ট করতে json.Unmarshal ব্যবহার করা হয়।

🔹 উদাহরণ: JSON থেকে স্ট্রাক্টে ডাটা পড়া

Go
package main

import (
    "encoding/json"
    "fmt"
)

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

func main() {
    // JSON ডাটা
    jsonData := `{"name": "Alice", "age": 30}`

    var p Person

    // JSON ডাটা পার্স করে স্ট্রাক্টে কনভার্ট করা
    err := json.Unmarshal([]byte(jsonData), &p)
    if err != nil {
        fmt.Println("JSON পার্স করতে সমস্যা:", err)
        return
    }

    // পার্স করা ডাটা প্রিন্ট করা
    fmt.Println("Name:", p.Name)
    fmt.Println("Age:", p.Age)
}

🔹 আউটপুট:

Bash
Name: Alice
Age: 30

👉 এখানে:

  • json.Unmarshal JSON ডাটা স্ট্রিং থেকে Go স্ট্রাক্টে কনভার্ট করে।
  • স্ট্রাক্টে json:"name" ট্যাগ ব্যবহার করে JSON এর কীগুলোর সাথে স্ট্রাক্ট ফিল্ডগুলোর সম্পর্ক নির্ধারণ করা হয়েছে।

JSON এনকোড (JSON Encoding)

Go এর স্ট্রাক্ট থেকে JSON ডাটা তৈরি করতে json.Marshal ব্যবহার করা হয়।

🔹 উদাহরণ: স্ট্রাক্ট থেকে JSON তৈরি করা

Go
package main

import (
    "encoding/json"
    "fmt"
)

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

func main() {
    p := Person{Name: "Bob", Age: 25}

    // স্ট্রাক্ট থেকে JSON ডাটা তৈরি করা
    jsonData, err := json.Marshal(p)
    if err != nil {
        fmt.Println("JSON এনকোড করতে সমস্যা:", err)
        return
    }

    // JSON ডাটা প্রিন্ট করা
    fmt.Println(string(jsonData))
}

🔹 আউটপুট:

Bash
{"name":"Bob","age":25}

👉 এখানে:

  • json.Marshal স্ট্রাক্টকে JSON ফরম্যাটে কনভার্ট করে।
  • JSON আউটপুটে কীগুলোর নাম json:"name" ট্যাগ অনুযায়ী আসে।

2️⃣ XML এর সাথে কাজ করা

Go তে XML ডাটা পার্স এবং এনকোড করার জন্য encoding/xml প্যাকেজটি ব্যবহৃত হয়। এটি JSON এর মতোই কাজ করে, তবে XML ডাটা এবং স্ট্রাক্টের মধ্যে সম্পর্ক স্থাপন করার জন্য XML ট্যাগ ব্যবহার করা হয়।

XML পার্স (XML Parsing)

XML ডাটা পড়তে এবং Go এর স্ট্রাক্টে কনভার্ট করতে xml.Unmarshal ব্যবহার করা হয়।

🔹 উদাহরণ: XML থেকে স্ট্রাক্টে ডাটা পড়া

Go
package main

import (
    "encoding/xml"
    "fmt"
)

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

func main() {
    // XML ডাটা
    xmlData := `<Person><name>Alice</name><age>30</age></Person>`

    var p Person

    // XML ডাটা পার্স করে স্ট্রাক্টে কনভার্ট করা
    err := xml.Unmarshal([]byte(xmlData), &p)
    if err != nil {
        fmt.Println("XML পার্স করতে সমস্যা:", err)
        return
    }

    // পার্স করা ডাটা প্রিন্ট করা
    fmt.Println("Name:", p.Name)
    fmt.Println("Age:", p.Age)
}

🔹 আউটপুট:

Bash
Name: Alice
Age: 30

👉 এখানে:

  • xml.Unmarshal XML ডাটা স্ট্রিং থেকে Go স্ট্রাক্টে কনভার্ট করে।
  • স্ট্রাক্টে xml:"name" ট্যাগ ব্যবহার করে XML এর ট্যাগগুলোর সাথে স্ট্রাক্ট ফিল্ডগুলোর সম্পর্ক নির্ধারণ করা হয়েছে।

XML এনকোড (XML Encoding)

Go এর স্ট্রাক্ট থেকে XML ডাটা তৈরি করতে xml.Marshal ব্যবহার করা হয়।

🔹 উদাহরণ: স্ট্রাক্ট থেকে XML তৈরি করা

Go
package main

import (
    "encoding/xml"
    "fmt"
)

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

func main() {
    p := Person{Name: "Bob", Age: 25}

    // স্ট্রাক্ট থেকে XML ডাটা তৈরি করা
    xmlData, err := xml.Marshal(p)
    if err != nil {
        fmt.Println("XML এনকোড করতে সমস্যা:", err)
        return
    }

    // XML ডাটা প্রিন্ট করা
    fmt.Println(string(xmlData))
}

🔹 আউটপুট:

Bash
<Person><name>Bob</name><age>25</age></Person>

👉 এখানে:

  • xml.Marshal স্ট্রাক্টকে XML ফরম্যাটে কনভার্ট করে।
  • XML আউটপুটে ট্যাগের নাম xml:"name" ট্যাগ অনুযায়ী আসে।

3️⃣ JSON ও XML এর মধ্যে পার্থক্য

  • JSON: কমপ্যাক্ট, পাঠযোগ্য এবং হালকা। এটি সাধারণত ওয়েব সার্ভিসে ব্যবহৃত হয়।
  • XML: আরও বিস্তারিত এবং সঠিকভাবে স্ট্রাকচারড ডাটা ধারণ করতে পারে, তবে একটু ভারী হতে পারে। এটি মূলত পুরনো প্রযুক্তি বা কাঠামোবদ্ধ ডাটাবেসে ব্যবহৃত হয়।

সারাংশ:

  • JSON এবং XML পার্স এবং এনকোড করার জন্য Go তে encoding/json এবং encoding/xml প্যাকেজ ব্যবহার করা হয়।
  • JSON এ json.Unmarshal এবং json.Marshal, XML এ xml.Unmarshal এবং xml.Marshal ব্যবহার করে ডাটা কনভার্ট করা হয়।
  • Go স্ট্রাক্টের ফিল্ডগুলোতে json:"fieldname" বা xml:"fieldname" ট্যাগ ব্যবহার করে ফিল্ডগুলোর সাথে ডাটা ফরম্যাটের কীগুলোর সম্পর্ক নির্ধারণ করা হয়।

এইভাবে, Go তে JSON এবং XML ডাটা ফরম্যাটের সাথে কাজ করা সহজ এবং কার্যকরী।

©2025 Linux Bangla | Developed & Maintaind by Linux Bangla.