Dinamik JSON Parsing Yöntemleri

Bazı durumlarda struct ile JSON parse etme uğraştırıcı olabiliyor. Özellikle json verisi olarak hangi tipte veri geleceğini bilmediğimiz durumlarda.

Map ve Boş Interface Kullanarak

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	//Öncelikle json düzeninde bir string oluşturalım
	futbolcuJson := `{
        "formaNo" : 10,
        "isim" : "Hakan Çalhanoğlu",
        "ülke" : "TR",
        "mevki" : "Orta Saha"
	}`

	// Map ve boş interface ile bir örnek oluşturalım
	var futbolcu map[string]interface{}

	//fulbolcuJson string ini futbolcu örneğini parse edelim
	json.Unmarshal([]byte(futbolcuJson), &futbolcu)

	//Oluşturduğumuz örneği bölümleri ile ekrana bastıralım
	fmt.Println("Forma No :", futbolcu["formaNo"],
		"\nİsim :", futbolcu["isim"],
		"\nÜlke :", futbolcu["ülke"],
		"\nMevki :", futbolcu["mevki"])
}

Çıktımız

Forma No : 10 
İsim : Hakan Çalhanoğlu 
Ülke : TR 
Mevki : Orta Saha

Dizi Şeklinde Map ve Boş Interface Kullanarak

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	//Bu sefer futbolcuları json içerisinde dizi
	//olarak tanımladık
	futbolcularJson := `[
		{
			"formaNo": 10,
			"isim": "Hakan Çalhanoğlu",
			"ülke": "TR",
			"mevki": "Orta Saha"
		},
		{
			"formaNo": 11,
			"isim": "Yusuf Yazıcı",
			"ülke": "TR",
			"mevki": "Forvet"
		},
		{
			"formaNo": 23,
			"isim": "Uğurcan Çakır",
			"ülke": "TR",
			"mevki": "Kaleci"
		}
	]`

	// Map'imizi boş interface ile dizi olarak oluşturalım
	var futbolcular []map[string]interface{}

	// Unmarshall işlemi
	json.Unmarshal([]byte(futbolcularJson), &futbolcular)

	//for döngüsü ile tüm futbolcuları ekrana bastıralım
	for index, futbolcu := range futbolcular {

		fmt.Printf("%d. sıradaki futbolcu:\n", index+1)
		fmt.Println("Forma No :", futbolcu["formaNo"],
			"- İsim :", futbolcu["isim"],
			"- Ülke :", futbolcu["ülke"],
			"- Mevki :", futbolcu["mevki"])
	}
}

Çıktımız

1. sıradaki futbolcu:
Forma No : 10 - İsim : Hakan Çalhanoğlu - Ülke : TR - Mevki : Orta Saha
2. sıradaki futbolcu:
Forma No : 11 - İsim : Yusuf Yazıcı - Ülke : TR - Mevki : Forvet
3. sıradaki futbolcu:
Forma No : 23 - İsim : Uğurcan Çakır - Ülke : TR - Mevki : Kaleci

Map ve Boş String ile İç-içe JSON Verisi Okuma

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	//İç içe bir Json verisi oluşturalım
	futbolcuJson := `{
		"formaNo": 10,
		"isim": "Hakan Çalhanoğlu",
		"ülke": "TR",
		"mevki": "Orta Saha",
		"istatistik": {
			"gol": 12,
			"asist": 7,
			"cezalı": false
		}
	}`

	// Örneğimizi oluşturalım
	var futbolcu map[string]interface{}

	// Parsing'i yapalım
	json.Unmarshal([]byte(futbolcuJson), &futbolcu)

	istatistik := futbolcu["istatistik"].(map[string]interface{})

	//Değerleri Anahtarlar ile okuyalım.
	fmt.Println("Forma No :", futbolcu["formaNo"],
		"\nİsim :", futbolcu["isim"],
		"\nÜlke :", futbolcu["ülke"],
		"\nMevki :", futbolcu["mevki"],
		"\nİstatistik : (Gol:", istatistik["gol"], "- Asist:", istatistik["asist"], "- Cezalı:", istatistik["cezalı"], ")")
}

Çıktımız

Forma No : 10 
İsim : Hakan Çalhanoğlu 
Ülke : TR 
Mevki : Orta Saha 
İstatistik : (Gol: 12 - Asist: 7 - Cezalı: false )

Map ve Boş String ile İç-içe Dizi JSON Verisi Okuma

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	//İç-içe veriler saklayan dizi Json verisi
	futbolcularJson := `[
		{
		"formaNo": 10,
		"isim": "Hakan Çalhanoğlu",
		"ülke": "TR",
		"mevki": "Orta Saha",
		"istatistik": {
			"gol": 12,
			"asist": 7,
			"cezalı": false
			}
		},
		{
		"formaNo": 11,
		"isim": "Yusuf Yazıcı",
		"ülke": "TR",
		"mevki": "Forvet",
		"istatistik": {
			"gol": 17,
			"asist": 9,
			"cezalı": true
			}
		},
		{
		"formaNo": 23,
		"isim": "Uğurcan Çakır",
		"ülke": "TR",
		"mevki": "Kaleci",
		"istatistik": {
			"gol": 0,
			"asist": 2,
			"cezalı": false
			}
		}
	]`

	// Futbolcu dizimizi tanımlayalım
	var futbolcular []map[string]interface{}

	// Unmarshall işlemi
	json.Unmarshal([]byte(futbolcularJson), &futbolcular)

	for index, futbolcu := range futbolcular {
		//futbolcuya özel istatistiklerimizi kullanmak için
		//map'imizi oluşturalım
		istatistik := futbolcu["istatistik"].(map[string]interface{})
		//Futbolcunun bilgilerini ekrana bastıralım
		fmt.Printf("%d. Futbolcu --------------------\n", index+1)
		fmt.Println("Forma No :", futbolcu["formaNo"],
			"\nİsim :", futbolcu["isim"],
			"\nÜlke :", futbolcu["ülke"],
			"\nMevki :", futbolcu["mevki"],
			"\nİstatistik : (Gol:", istatistik["gol"], "- Asist:", istatistik["asist"], "- Cezalı:", istatistik["cezalı"], ")")
	}

}

Çıktımız

1. Futbolcu --------------------
Forma No : 10 
İsim : Hakan Çalhanoğlu 
Ülke : TR 
Mevki : Orta Saha 
İstatistik : (Gol: 12 - Asist: 7 - Cezalı: false )
2. Futbolcu --------------------
Forma No : 11 
İsim : Yusuf Yazıcı 
Ülke : TR 
Mevki : Forvet 
İstatistik : (Gol: 17 - Asist: 9 - Cezalı: true )
3. Futbolcu --------------------
Forma No : 23 
İsim : Uğurcan Çakır 
Ülke : TR 
Mevki : Kaleci 
İstatistik : (Gol: 0 - Asist: 2 - Cezalı: false )

Last updated