JSON (JavaScript Object Notation), çok yönlü ve çok popüler bir veri formatıdır. Genellikle web uygulamaları arasındaki iletişim için ve ayrıca büyük miktarda 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ışma
JSON ile yapacağınız işlerin çoğunu iki genel kategoriye ayırabilirsiniz: sıralama ve ayırma. Vikipedi sıralamayı şu şekilde tanımlar:
Bilgisayar biliminde sıralama, bir nesnenin bellek temsilini depolama veya iletme 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 olan bir forma dönüştürme işlemidir. Unmarshaling işlemin 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'a sıralayabilirsiniz. Ve ters işlemi gerçekleştirerek JSON verilerini Go değişkenlerine dönüştürebilirsiniz.
Go'da JSON'a Sıralama
Git sağlar kodlama/json paketi JSON ile çalışmanızı kolaylaştırmak için. Bu paket birkaç işlev içerir, ancak sıralama için kullanacağınız işlev, mareşal işlev. mareşal aşağıdaki işlev imzasına sahiptir:
func Mareşal (v arayüz{}) ([]bayt, hata)
Bu şu demek mareşal herhangi bir veri türünden bir parametre kabul eder ve iki değer döndürür: bir bayt dilimi ve bir hata. Başka bir deyişle, çağırırsın mareşal bir Go değeri ile 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 dilimi döndürür.
İşte kullanan bir kod örneği mareşal bir haritayı JSON'a dönüştürmek için. Bu örneği çalıştırmak için ihtiyacınız olan tek şey, içinde bir Go dosyası oluşturmaktır. favori kod editörünveya Oyun alanına git:
paket ana
içe aktarmak (
"kodlama/json"
"fmt"
)işlev ana(){
val := harita[dize]int{
"John": 25,
"Mary": 19,
"adam": 5,
}
res, _ := json. Mareşal (val)
fmt.Yazdır(sicim(res))
}
Bu kodu çalıştırırsanız, aşağıdaki çıktıyı verir:
Daha önce bahsedildiği gibi, her türlü Go verisini JSON'a sıralayabilirsiniz, ancak gerçek hayatta genellikle yapıları sıralarsınız. Bu nedenle Go, vermenize izin veren yapı etiketleri adı verilen bir özellik sağlar. mareşal yapılarınızı dönüştürmek için ekstra talimatlar.
Yapı etiketi, yapı bildiriminizde bir alanın veri türünün yanına eklediğiniz bir dizedir. Yapı etiketleri yolu ayarlamanıza izin verir mareşal etiketin ait olduğu alanı ele alır. JSON çıktısında bir alanı yeniden adlandırmak için yapı etiketlerini kullanabilir, hatta tamamen atlayabilirsiniz. Yapı etiketleri (bu mareşal tanır) "json:" alt dizesiyle başlar.
Örnek olarak, bir yapınız olduğunu varsayalım Araba Bu, bir araba hakkında bazı bilgileri temsil eder. İşte oluşturmak için kod Araba ve onu JSON'a sıralayın:
paket ana
içe aktarmak (
"kodlama/json"
"fmt"
)
işlev ana(){
tip Araba yapısı {
Marka dizesi
Model dizisi
Fiyat int
}
val := Araba{Marka: "mercedes", Modeli: "Benz", Fiyat: 50000}
res, _ := json. Mareşal (val)
fmt.Yazdır(sicim(res))
}
Bu kod çıktıyı üretir:
bu Marka, modeli, Ve Fiyat alanları Araba büyük harflerle başlamalı veya mareşal onları dönüştürmek mümkün olmayacaktır. Bu, JSON çıktı alanlarının da büyük harfle başlamasıyla sonuçlanır. Ancak, JSON'da adların küçük harfle başlamasını veya bir alanı tamamen yeniden adlandırmak isterseniz ne olur? Yapı etiketlerinin girdiği yer burasıdır. İşte bir örnek:
paket ana
içe aktarmak (
"kodlama/json"
"fmt"
)
işlev ana(){
tip Araba yapısı {
Kimlik int `json:"-"`
Marka dizgisi `json:"tip"`
Model dizisi `json:"modeli"`
Fiyat int `json:"fiyat"`
}
val := Araba{ID: 0, Marka: "mercedes", Modeli: "Benz", Fiyat: 50000}
res, _ := json. Mareşal (val)
fmt.Yazdır(sicim(res))
}
Bu kod, yeni bir kimlik alanı sunar. mareşal bir yapı etiketi aracılığıyla JSON çıktısından atlar. Kod, diğer yapı alanlarını yeniden adlandırmak için yapı etiketlerini de kullanır. İşte program çıktısı:
Gördüğünüz gibi struct etiketinin "json:"dan sonraki kısmı Marshal'ın çıktısında alanın adı oluyor. Bir istisna vardır: "-" dizesiyse, Marshal bu alanı çıktıdan çıkarır. Marshal ve struct etiketleri hakkında daha fazlasını şuradan okuyabilirsiniz: Dokümantasyona git.
Go'da JSON'dan Ayrılma
Encoding/json paketi, aynı zamanda bir unmarshaling işlevi de sağlar. Mareşal. Aşağıdaki işlev imzasına sahiptir:
func Unmarshal (veri []bayt, v arayüz{}) hata
Farklı mareşal, Mareşal bir değer döndürmez. Bunun yerine, JSON'u ilk bağımsız değişkende 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. Mareşal yapı etiketleriyle de çalışır, ancak burada etiketler şunu söyler: Mareşal hangi JSON alanlarının hangi yapı alanlarıyla eşleştiği.
Bir programda sıralamayı kaldırırken, bir API'den veri çek, ancak burada yapay veriler kullanacaksınız. İşte nasıl kullandığınız Mareşal:
paket ana
içe aktarmak (
"kodlama/json"
"fmt"
)işlev ana(){
tip Araba yapısı {
Kimlik int `json:"-"`
Marka dizgisi `json:"tip"`
Model dizisi `json:"modeli"`
Fiyat int `json:"fiyat"`
}jsonInput := `{
"tip": "toyota",
"modeli": "Camry",
"fiyat": 2000
}`var jsonÇıkış Arabası
hata := json. Mareşal([]bayt(jsonInput), &jsonOutput)eğer hata != sıfır {
fmt. Yazdır("JSON kod çözme hatası!")
geri dönmek
}
fmt.Yazdır(jsonÇıktı)
}
Bu kod, önceki örnekle aynı Car tipini kullanır ve bir JSON nesnesini Car tipi bir yapıya dönüştürür, ardından yapıdaki verileri yazdırır. Çalıştırıldığında, program şu çıktıyı üretir:
Bu, sahte JSON verilerinin başarılı bir şekilde jsonÇıktı yapı
Go, JSON ile Çalışmayı Kolaylaştırır
Encoding/json paketiyle Go'da JSON ile çalışmak iki işlev çağrısı kadar basittir: Marshaland Unmarshal. Go ayrıca JSON'u struct etiketleriyle sıralama/sıralamadan çıkarma sürecini ö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 evrenseldir ki, JSON olabildiğince taşınabilirdir.