Jump to page: 1 2
Thread overview
D Şirketi'nin başı, JSON ile belada...:)
Jun 12, 2012
Salih Dinçer
Jun 13, 2012
Salih Dinçer
Jun 13, 2012
Kadir Can
Jun 13, 2012
Salih Dinçer
Jun 14, 2012
Salih Dinçer
Feb 25, 2022
Salih Dincer
Feb 25, 2022
Salih Dincer
Feb 25, 2022
Salih Dincer
June 12, 2012

Baba ve oğulun patron olduğu bir D ailesi şirketimiz var ve biz bunu JSON ile şu şekilde ifade ediyoruz:

Alıntı:

>
> string veri = `
> {
>     "patron":
>     {
>           "oğul":{"ismi":"Ahmet"},
>           "baba":{"ismi":"Mahmut"}
>     }
> }`;
> ```


Kurallara uygun mu? Uygun, çünkü şu şekilde okuyabiliyoruz...

Alıntı:
>
>
writefln("Oğul patron, %s bey ise", parseJSON(veri).object["patron"]
                                                   .object["oğul"]
                                                   .object["ismi"].str);

writefln("Baba patron, %s beydir!", parseJSON(veri).object["patron"]
                                                   .object["baba"]
                                                   .object["ismi"].str);

Ancak bunu "data structures" kodunu (yapısını) nasıl kuracağız? Şöyle bir şey aklıma geliyor, saçma oldu gibi!

Alıntı:

>
> struct Patron
> {
>     struct oğul
>     {
>         string ismi;
>     }
>     struct baba
>     {
>         string ismi;
>     }
> }
> ```


-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
June 12, 2012

JSON düzeninden koda geçmek doğru olmayabilir. Gördüğüm kadarlık koda bakarak patron kavramının içindeki 'oğul'un ve 'baba'nın bir tür referans olduklarını görüyorum.

Yani aslında İnsan diye bir tür de var ve Patron'un içindeki üyeler İnsanlar topluluğunun içindeki iki insana referans oluyorlar gibi. Öyle mi? Yani Patron insanlardan oluşmaz, başka yerde duran insanlara referanstan oluşur. "Bu firmadaki patronlar şu ve şu kişilerdir" dediğimizde yalnızca kişilere gönderme yapıyoruz.

O yüzden şu doğru:

struct Patron
{
   string oğul;
   string baba;
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 13, 2012

Aslında XML ile kolaylıkla yapabileceğimiz "nested data structure" gerçekleştirmek istiyorum. Yani hiyerarşik bir yapı söz konusu ki bu sadece şirket patronlardan oluşmayacak. Örneğin;

Ortaklardan biri (baba ve oğul dememin sebebi samimi görünmesi içindi) pazarlama ve satış müdürlerinden sorumlu, daha doğrusu altındaki bu müdürler ona rapor vermekteler, diğer ortak ise satın alma ve muhasebe müdürlerini kapsamakta. Öyleyse yapı şöyle olabilir:

Yöneticiler (kök)

  • Baba
    ** Satın Alma Müdürü
    ** Muhasebe Müdürü
  • Oğul
    ** Pazarlama Müdürü
    ** Satış Müdürü

Elbette bu müdürler altında yardımcı idareciler (chief, supervisor, leader vb.) de olacağı için hiyerarşiyi sürdürebilmeliyiz...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 13, 2012

Daha fazla veri için işe yaramayabilir ama sadece birkaç bilgi kullanılacaksa eşleme tablolarının kullanımı uygun olmaz mı?
Örnek;

string[][string] yöneticiler = [ "baba" : ["Patron", "Satın Alma Müdürü", "Muhasebe Müdürü"],
                                "oğul" : ["Patron", "Pazarlama Müdürü", "Satış Müdürü"],
                                "yeğen": ["İdareci", "Satın Alma Müdür Yardımcısı"] ];

Bana makul göründü.Hatta "Şirket" yapısı içinde "Patron" yapısı tanımlayıp onun içine "Bölüm Müdürü" yapısını tanımlayıp değer kısmında onu kullanabilirsek daha iyi olur gibi geliyor:

//Tanım kısmından emin değilim, boş bırakıyorum
/* */ yöneticiler = [ "baba" : [ şirket.patron.müdür.satın_alma, şirket.patron.müdür.muhasebe ] ];

Böyle bir esneklikten faydalanabiliyorsak birçok alanda çok faydalı olur.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 13, 2012

Alıntı (acehreli):

>

Yani örneğin her Kişi türünün yaş, maaş, vs. bilgileri olacak. Bu bilgilerin Yöneticiler türünün içinde olmasını istemiyorsun, değil mi?
Tam tersi, daha kapsamlı olacak. Bunun, personelin bir çok verisini tutan bir ERP yazılımı olduğunu düşünelim; ve bu şirketteki hiyerarşik düzenin önemli olduğunu...

Hatta bunun global bir firma olduğunu kim kimle ilişki kurmuş ve nasıl yazışmış. Bağlantıları hangi sıra ile olmuş CRM yazılımı olarak da düşünebiliriz.

Özetle hiyararşinin iliklerimizde hissedebileceğimiz kadar bir yapı (nested structure) olacak. Standart child mantığı işte ve JSON bunu bize verebiliyor ama nasıl kullanacağımı (okuma tamam da, yazma!) henüz keşfedemedim...:(

Peki hiyerarşiyi şöyle anonim bir örnek ile işlesek nasıl olur?

import std.stdio, std.json;

void main() {
   string veri = `
{
"aile": {
       "anne": {
           "ismi":"Havva"
       },
       "baba": {
           "ismi": {
               "ilkadı":"Adem"
           },
           "oğlu": {
               "ismi":"Kabil"
           }
       }
   }
}`;

   with (parseJSON(veri).object["aile"]) {
       writef("%s'dan olma ", object["anne"].object["ismi"].str);
       writef("%s'in oğlu: ", object["baba"].object["ismi"].object["ilkadı"].str);
       writefln("%s", object["baba"].object["oğlu"].object["ismi"].str);
   }
}

Çıktısı:
'Havva'dan olma Adem'in oğlu: Kabil'

Alıntı (acehreli):

>

Hepsi olabilir. Birincisi bir "kişiler ve ünvanları" tablosu anlamına gelmiş. İkincisi de "şu kişi şu görevlerden sorumludur" gibi.

Ali

Sanırım bu satırlar İstanbul'dan gelen elektronlar sayesinde yazıldı. Öyleyse hoş geldin...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 13, 2012

Sıradüzeni JSON ile ifade etmekte bir sorun yok. Yanıtlanması gereken şu: Kişiler diye ayrı bir topluluk var da Yöneticiler onun içindeki insanlara referans mı taşıyor? Bence öyle olmalı. Ondan sonra referansın kişi ismi mi yoksa Kişi göstergesi mi olduğuna karar verilir.

Yani örneğin her Kişi türünün yaş, maaş, vs. bilgileri olacak. Bu bilgilerin Yöneticiler türünün içinde olmasını istemiyorsun, değil mi? Yöneticiler yalnızca sıradüzeni tutar ama her kişinin bilgisi yandaki Kişiler topluluğunda durur.

Yöneticiler de bir ağaç yapısı. Her düğümünde Görev ve İsim olması yeterli. İsim ile Kişiler içindeki hangi kişi olduğu bilinir.

Ben öyle anlıyorum.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 13, 2012

Hepsi olabilir. Birincisi bir "kişiler ve ünvanları" tablosu anlamına gelmiş. İkincisi de "şu kişi şu görevlerden sorumludur" gibi.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 14, 2012

Sanırım oldu...:)

Şimdi sıra, bunu OOP mantığına oturtmak...

/*
   hiyerarşi.d (15.06.2012)
*/
import std.stdio, std.json;

void main() {
   JSONValue json;
   JSONValue[string] kat1, kat2,
                     kat3a, kat3b,
                     kat4a, kat4b;
   string veri;

   json.type = JSON_TYPE.STRING;
   {
       json.str = "Havva"; kat3a["ismi"] = json;
       json.str = "Adem";  kat4a["ilkadı"] = json;
       json.str = "Kabil"; kat4b["ismi"] = json;
   }

   json.type = JSON_TYPE.OBJECT;
   {
       json.object = kat3a; kat2["anne"] = json;
       json.object = kat2;  kat1["aile"] = json;
   }

   json.object = kat1;
   veri = toJSON(&json);
   veri.writeln;

   json.type = JSON_TYPE.OBJECT;
   {
       json.object = kat4a; kat3b["ismi"] = json;
       json.object = kat4b; kat3b["oğlu"] = json;
       json.object = kat3b; kat2["baba"] = json;
       json.object = kat2;  kat1["aile"] = json;
   }

   json.object = kat1;
   veri = toJSON(&json);
   veri.writeln;

   with(parseJSON(veri).object["aile"])
   {
       writef("%s'dan olma ", object["anne"].object["ismi"].str);

       with(object["baba"])
       {
           writef("%s'in oğlu: ", object["ismi"].object["ilkadı"].str);
           writefln("%s", object["oğlu"].object["ismi"].str);
       }
   }
}/*
Çıktısı:
{"aile":{"anne":{"ismi":"Havva"}}}
{"aile":{"anne":{"ismi":"Havva"},"baba":{"ismi":{"ilkadı":"Adem"},
                                "oğlu":{"ismi":"Kabil"}}}}
Havva'dan olma Adem'in oğlu: Kabil
*/

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 25, 2022

On Thursday, 14 June 2012 at 20:37:46 UTC, Salih Dinçer wrote:

>
Çıktısı:
{"aile":{"anne":{"ismi":"Havva"}}}
{"aile":{"anne":{"ismi":"Havva"},"baba":{"ismi":{"ilkadı":"Adem"},
                                "oğlu":{"ismi":"Kabil"}}}}
Havva'dan olma Adem'in oğlu: Kabil
*/

Herhalde 10 senelik bir başlığı hortlatarak tarihe geçiyorum ama olsun. Çünkü yukarıdaki kod günümüze kadar çalışmamaya başlamış. Hatta std.json2 telafuz ediliyormuş. Bakalım önümüzde yaşayacak bir 10 sene daha varsa neler olacak hep birlikte göreceğiz...

Çalışan kod aşağıda ve devamındaki mesajda bir olcak!

import std.json;
import std.stdio;

void main() {
   JSONValue json;
   JSONValue[string] kat1, kat2,
                     kat3a, kat3b,
                     kat4a, kat4b;
   string veri;

       json.str = "Havva"; kat3a["ismi"] = json;
       json.str = "Adem";  kat4a["ilkadı"] = json;
       json.str = "Kabil"; kat4b["ismi"] = json;
       json.object = kat3a; kat2["anne"] = json;
       json.object = kat2;  kat1["aile"] = json;

   json.object = kat1;
   veri = json.toJSON(true);

       json.object = kat4a; kat3b["ismi"] = json;
       json.object = kat4b; kat3b["oğlu"] = json;
       json.object = kat3b; kat2["baba"] = json;
       json.object = kat2;  kat1["aile"] = json;

   json.object = kat1;
   veri = json.toJSON(true);

   auto teksatırJSON = parseJSON(veri).object["aile"];
   with(teksatırJSON)
   {
       writef("%s'dan olma ", object["anne"].object["ismi"].str);

       with(object["baba"])
       {
           writef("%s'in oğlu: ", object["ismi"].object["ilkadı"].str);
           writefln("%s", object["oğlu"].object["ismi"].str);
       }
   }
   teksatırJSON.writeln("\n", veri);
}
February 25, 2022

On Friday, 25 February 2022 at 07:31:14 UTC, Salih Dincer wrote:

>

[...] ve devamındaki mesajda bir olcak!

Hortlattığım bu başlık, geçmişin emeğinin günümüze olan faydasını gösteriyor. Çünkü std.json belgeleri bana amacıma erişmemde pek faydası olmamıştı...

Veri kaynağı şurada ve kodu aşağıda:

import std.json;
import std.stdio;

void main()
{
  with(veri.parseJSON["OKUL"])
  {
    with(object["gelen"])
    {
      foreach(öğrenci; object["öğrenciler"].array)
      {
        öğrenci.object["adı"].str.write(" (");
        öğrenci.object["numarası"].integer.writeln(")");
        öğrenci.object["fakültesi"].str.writeln("\n");
      }
    }

    with(object["mezun"])
    {
      write("DOĞRUDAN ERİŞİM: ");

      with(object["öğrenciler"][0])
        writefln("%s %s/%d", object["fakültesi"].str,
                             object["adı"].str,
                             object["numarası"].integer);
    }
  }
}/* ÇIKTISI:
Mehmet Demir (12257000)
Makine Mühendisliği

Kaan Haktan (11154217)
Elektronik Mühendisliği

Ahmet Candan (41153007)
Endüstri Mühendisliği

DOĞRUDAN ERİŞİM: Makine Mühendisi Celal Bayar/12530154
*/

Burada JSON verisi oluşturmayı değil, hazırda bulunan (string veri) JSON'nın OKUL kökündeki iki dala ayrı ayrı ulaşmayı görüyoruz. Aslında bir benzerini Adem ile Havva ailesinde gördük. Özellikle bir döngü içinde olması önemli veya yukarıdaki gibi doğrudan erişim ile bir cümle kuruyorsanız gayet basit.

JSON, örneğin programlarınızın ayar dosyası olabilir. Tıpku DUB ile kullandığımız gibi. Bence D, JSON'a daha çok önem vermeli. Bu konuda hala yapılabilecek çok şey var.

Başarılar...

« First   ‹ Prev
1 2