JSON, en çok yönlü, taşınabilir veri biçimlerinden biridir ve Go, onunla çalışmak için mükemmel desteğe sahiptir.

Go'da JSON Kullanma Kılavuzu

JSON (JavaScript Object Notation), çok yönlü ve oldukça popüler bir veri formatıdır. Genellikle web uygulamaları arasındaki iletişim için ve ayrıca büyük miktarlarda yapılandırılmış uygulama verilerini depolamanın uygun bir yolu olarak kullanılır.

JSON o kadar kullanışlıdır ki, Go dahil neredeyse tüm modern programlama dilleri onunla çalışmak için yerleşik destek sağlar.

Go’da JSON ile Çalışmak

JSON ile yapacağınız işlerin çoğunu iki genel kategoriye ayırabilirsiniz: sıralama ve sıralamadan çıkarma. Wikipedia , sıralamayı şu şekilde tanımlar:

Bilgisayar biliminde sıralama, bir nesnenin bellek temsilini depolama veya iletim için uygun bir veri formatına dönüştürme işlemidir. Genellikle verilerin bir bilgisayar programının farklı bölümleri arasında veya bir programdan diğerine taşınması gerektiğinde kullanılır.

Daha basit bir ifadeyle, sıralama, bir değişkende depolanan verileri başka bir programa geçmesi daha kolay bir forma dönüştürme işlemidir. Sıralamayı bozma işlemi bunun tersidir: Taşıma için biçimlendirilmiş verileri almayı ve programınızın kullanması için daha kolay bir forma dönüştürmeyi içerir.

Go’yu kullanarak yerel veri yapılarını JSON’da sıralayabilirsiniz. Ve JSON verilerini Go değişkenlerine ayrıştırarak ters eylemi gerçekleştirebilirsiniz.

Go’da JSON’a Sıralama

Go, JSON ile çalışmanızı kolaylaştırmak için kodlama/json paketini sağlar. Bu paket çeşitli işlevler içerir, ancak sıralama için kullanacağınız işlev, Mareşal işlevidir. Marshal aşağıdaki fonksiyon imzasına sahiptir:

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

Bu, Marshal’ın herhangi bir veri türünden bir parametreyi kabul ettiği ve iki değer döndürdüğü anlamına gelir: bir bayt dilimi ve bir hata. Başka bir deyişle, bir Go değeriyle Marshal’ı çağırırsınız ve onu JSON’a dönüştürür ve JSON eşdeğerini döndürür. Dönüştürme işlemi sırasında bir hatayla karşılaşırsa, hatayı ve boş bir dilim döndürür.

İşte bir haritayı JSON’a dönüştürmek için Marshal’ı kullanan bir kod örneği . Bu örneği çalıştırmak için tek ihtiyacınız olan favori kod düzenleyicinizde bir Go dosyası oluşturmak veya Go oyun alanını kullanmaktır :

package main

import (

    “encoding/json”

    “fmt”

)

func main() {

    val := map[string]int{

        “john”: 25,

        “mary”: 19,

        “adam”: 5,

    }

    res, _ := json.Marshal(val)

    fmt.Println(string(res))

}

Daha önce bahsedildiği gibi, gerçek hayatta genellikle yapıları sıralayacak olsanız da, herhangi bir Go verisini JSON’a sıralayabilirsiniz. Bu nedenle Go, yapılarınızı dönüştürmek için Marshal’a ekstra talimatlar vermenize izin vermek için yapı etiketleri adı verilen bir özellik sağlar .

Yapı etiketi, bir alanın veri türünün yanına yapı bildiriminize eklediğiniz bir dizedir. Struct etiketleri, Marshal’ın etiketin ait olduğu alana nasıl davranacağını ayarlamanıza izin verir . JSON çıktısındaki bir alanı yeniden adlandırmak için yapı etiketlerini kullanabilir, hatta tamamen atlayabilirsiniz. Yapı etiketleri ( Mareşal’in tanıdığı) “json:” alt dizesiyle başlar.

Örnek olarak, bir araba hakkında bazı bilgileri temsil eden bir Araba yapınız olduğunu varsayalım. İşte bir Araba oluşturmak ve onu JSON’a sıralamak için kod:

package main

import (

    “encoding/json”

    “fmt”

)

func main() {

    type Car struct {

        Brand string

        Model string

        Price int

    }

    val := Car{Brand: “Mercedes”, Model: “Benz”, Price: 50000}

    res, _ := json.Marshal(val)

    fmt.Println(string(res))

}

Bu kod çıktıyı üretir:

Arabanın Marka , Model ve Fiyat alanlarının büyük harflerle başlaması gerekir, aksi takdirde Marshal bunları dönüştüremez. Bu da büyük harfle başlayan JSON çıktı alanları ile sonuçlanır. Peki ya JSON’da adların küçük harfle başlamasını istiyorsanız veya bir alanı tamamen yeniden adlandırmak istiyorsanız? Yapı etiketlerinin geldiği yer burasıdır. İşte bir örnek:

package main

import (

    “encoding/json”

    “fmt”

)

func main() {

    type Car struct {

        ID    int    `json:”-“`

        Brand string `json:”type”`

        Model string `json:”model”`

        Price int    `json:”price”`

    }

    val := Car{ID: 0, Brand: “Mercedes”, Model: “Benz”, Price: 50000}

    res, _ := json.Marshal(val)

    fmt.Println(string(res))

}

Bu kod, Marshal’ın bir yapı etiketi aracılığıyla JSON çıktısından çıkardığı yeni bir kimlik alanı sunar. Kod ayrıca diğer yapı alanlarını yeniden adlandırmak için yapı etiketlerini kullanır. İşte programın çıktısı:

Gördüğünüz gibi, struct etiketinin “json:” dan sonraki kısmı, Marshal’ın çıktısındaki alanın adı olur. Bir istisna vardır: “-” dizesiyse, Marshal bu alanı çıktıdan çıkarır. Go belgelerinde Marshal ve struct etiketleri hakkında daha fazla bilgi edinebilirsiniz .

Go’da JSON’dan Unmarshaling

Encoding/json paketi, Unmarshal adlı bir unmarshaling işlevi de sağlar . Aşağıdaki işlev imzasına sahiptir:

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

Marshal’dan farklı olarak , Unmarshal bir değer döndürmez. Bunun yerine, ilk bağımsız değişkende JSON’u bir bayt dilimi olarak kabul eder ve ardından dönüştürülen verileri ikinci bağımsız değişkeninin işaret ettiği nesnede depolar. Unmarshal yapı etiketleriyle de çalışır, ancak burada etiketler Unmarshal’a hangi JSON alanlarının hangi yapı alanlarıyla eşleştiğini söyler.

Bir programda sıralamayı kaldırırken, bir API’den veri alabilirsiniz , ancak burada yapay veriler kullanacaksınız. Unmarshal’ı şu şekilde kullanırsınız :

package main

import (

    “encoding/json”

    “fmt”

)

func main() {

    type Car struct {

        ID    int    `json:”-“`

        Brand string `json:”type”`

        Model string `json:”model”`

        Price int    `json:”price”`

    }

    jsonInput := `{

        “type”: “Toyota”,

        “model”: “Camry”,

        “price”: 2000

    }`

    var jsonOutput Car

    err := json.Unmarshal([]byte(jsonInput), &jsonOutput)

    if err != nil {

        fmt.Println(“JSON decode error!”)

        return

    }

    fmt.Println(jsonOutput)

}

Bu kod, önceki örnekle aynı Car türünü kullanır ve bir JSON nesnesini Car türünde bir yapıya sıralar ve ardından yapıdaki verileri yazdırır. Çalıştırıldığında, program şu çıktıyı üretir:

Bu, sahte JSON verilerinin jsonOutput yapısına başarılı bir şekilde sıralanmadığını gösterir .

Go, JSON ile Çalışmayı Kolaylaştırıyor

Encoding/json paketiyle, JSON in Go ile çalışmak iki işlev çağrısı kadar basittir: Marshal ve Unmarshal . Go ayrıca, JSON’u struct etiketleriyle sıralama/unmarshaling işlemini özelleştirmenize olanak tanır.

Verileri JSON’a dönüştürmek, onu başka bir program veya işlemle paylaşmanın harika bir yoludur. Biçim o kadar evrensel ki JSON olabildiğince taşınabilir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir