-- Go

Go ile XML Veriyi JSON’a Dönüştürme

Go ile XML Veriyi JSON’a Dönüştürme

Gelişen yazılım teknolojileriyle birlikte veri formatları ve transfer yöntemleri de bir çok farklı şekilde gelişerek değişti. Uzun yıllardan beri en yaygın kullanılan ortak veri transfer formatı XML’di. Ancak bu dilin farklı bir çok sorunu da görmezden gelinemezdi. En basit anlamda düşünecek olursak; neden gereksiz XML taglarıyla diskte fazladan yer kaplıyoruz? İşte bu nedenle daha hafif bir veri formatı olarak da JSON geliştirildi ve yıllardır hızla yaygınlaşarak kullanılmaktadır.

Bu örneğimizde bir XML formatlı veriyi JSON formatına dönüştürmeyi inceleyeceğiz.

JSON’a dönüştürmek için bir XML veriye ihtiyacımız var. Örnek XML’imiz aşağıdaki gibi olacak;

XML dosyasının adı; Employees.xml

<?xml version="1.0"?>
<company>
        <person>
                <id>100987</id>
                <firstname>Cihan</firstname>
                <lastname>Özhan</lastname>
                <username>cihanozhan</username>
        </person>
        <person>
                <id>100995</id>
                <firstname>Kerim</firstname>
                <lastname>Fırat</lastname>
                <username>kerimfirat</username>
        </person>
        <person>
                <id>100985</id>
                <firstname>Emre</firstname>
                <lastname>Okumuş</lastname>
                <username>emreokumus</username>
        </person>
        <person>
                <id>100585</id>
                <firstname>Barış</firstname>
                <lastname>Özhan</lastname>
                <username>barisozhan</username>
        </person>
</company>

Projenin Go kodu;

package main

import (
	"encoding/json"
	"encoding/xml"
	"fmt"
	"io/ioutil"
	"os"
)

type jsonPerson struct {
	ID        int
	FirstName string
	LastName  string
	UserName  string
}

type Person struct {
	XMLName   xml.Name `xml:"person"`
	ID        int      `xml:"id"`
	FirstName string   `xml:"firstname"`
	LastName  string   `xml:"lastname"`
	UserName  string   `xml:"username"`
}

type Company struct {
	XMLName xml.Name `xml:"company"`
	Persons []Person `xml:"person"`
}

// Function of object Person
func (p Person) String() string {
	return fmt.Sprintf("\t ID : %d - FirstName : %s - LastName : %s - UserName : %s \n", p.ID, p.FirstName, p.LastName, p.UserName)
}

func main() {
	xmlFile, err := os.Open("Employees.xml")
	if err != nil {
		fmt.Println("Opening file error : ", err)
		return
	}
	defer xmlFile.Close()

	xmlData, _ := ioutil.ReadAll(xmlFile)

	var c Company
	xml.Unmarshal(xmlData, &c)

	// Write XML on screen
	fmt.Println(c.Persons)

	// Convert to JSON
	var person jsonPerson
	var persons []jsonPerson

	for _, value := range c.Persons {
		person.ID = value.ID
		person.FirstName = value.FirstName
		person.LastName = value.LastName
		person.UserName = value.UserName

		persons = append(persons, person)
	}

	jsonData, err := json.Marshal(persons)

	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	// Write JSON on screen
	fmt.Println(string(jsonData))

	// Write to JSON file
	jsonFile, err := os.Create("./Employees.json")

	if err != nil {
		fmt.Println(err)
	}
	defer jsonFile.Close()

	jsonFile.Write(jsonData)
	jsonFile.Close()
}

Programı çalıştırdığınızda projenin bulunduğu klasör içerisinde Employees.json isimli dosyanın oluştuğunu göreceksiniz. Böylelikle Employees.xml dosyasının JSON versiyonunu üretmiş olduk.

Çıktı;

[
    {"ID":100987,"FirstName":"Cihan","LastName":"Özhan","UserName":"cihanozhan"},
    {"ID":100995,"FirstName":"Kerim","LastName":"Fırat","UserName":"kerimfirat"},
    {"ID":100985,"FirstName":"Emre","LastName":"Okumuş","UserName":"emreokumus"},
    {"ID":100585,"FirstName":"Barış","LastName":"Özhan","UserName":"barisozhan"}
]

Github; https://github.com/cihanozhan/golang-json-samples

İyi çalışmalar.
Cihan Özhan

Yorumla

Yorum

  1. type Person struct {
    XMLName xml.Name `xml:”person”`
    ID int `xml:”id”`
    FirstName string `xml:”firstname”`
    LastName string `xml:”lastname”`
    UserName string `xml:”username”`
    }
    `xml:”firstname”` buradaki bu kod tam olarak neyi sağlıyor hocam

    • Go ile okuduğumuz XML dosyasının içerisindeki elementleri programatik olarak tanımlıyoruz.

      Yani, okuduğumuz XML içerisindeki person isimli node’u XMLName olarak, onun içindeki element’leri de Go strcuct’ı içindeki örneğin FirstName ile eşleştiriyoruz. XML’de okuduğun firstname Go yapısında FirstName ile temsil edilecek ve veriyi de bu şekilde ata demek oluyor.