Sayfayı Yazdır | Pencereyi Kapat

Json parçalama işlemleri

Nereden Yazdırıldığı: Clomosy | Forum
Kategori: Genel Programlama
Forum Adı: Genel İşlemler
Forum Tanımlaması: TRObject dili ile programlama yaparken karşılaşılan genel işlemler
URL: https://forum.clomosy.com.tr/forum_posts.asp?TID=710
Tarih: 09 Ocak 2025 Saat 12:57
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Json parçalama işlemleri
Mesajı Yazan: Osman
Konu: Json parçalama işlemleri
Mesaj Tarihi: 22 Temmuz 2024 Saat 15:46
ShowMessage(FieldByName('name').AsString);
Dökümantasyonda bu şekilde bir örnek var fakat daha derine girmek istersen json da nasıl ayıklama yapabiliriz 
Örnek {"result"["madde"{"anlam":"hello"}]} buradakli anlama nasıl ulaşıalabilir



Cevaplar:
Mesajı Yazan: Developer
Mesaj Tarihi: 22 Temmuz 2024 Saat 16:14
Merhaba Osman,
Aşağıdaki kodları inceler misin ?

var

  MyForm:TCLForm;

  panel1,panel2,panel3:TclProPanel;

  captionLbl,EUROCaptionLabel:TClProLabel;

  clEdit:TCLProEdit;

  ClCombo:TCLComboBox;

  qryJSONStr:String;

  qry:TCLJSONQuery;

 

  // *****************************JSONParse fonksiyonu****************************

 

  void JSONParse(JSONString: String);

  var

    Key, Value, jsonValue: String;

    i: Integer;

    InKey, InValue, InString: Boolean;

  {

    InKey = False;

    InValue = False;

    InString = False;

    Key = '';

    Value = '';

    jsonValue = '';

    i = 1;

 

    while (i <= Length(JSONString))

    {

      case JSONString of

      {

        '{', '}', ' ':

          {

            // Bu karakterleri görmezden gel

          }

        ':':

          if (not InString)

          {

            InKey = False;

            InValue = True;

          }

        ',':

          if (not InString)

          {

            // Bir anahtar-değer çifti tamamlandı

            if ((Key <> '') && (Value <> ''))

            {

              // JSON yapısındaki verileri ComboBox'a ata

              ClCombo.AddItem(Key,Value);

             

              //jsonValue = 'Key: ' + Key + ' Value: ' + Value;

              //ShowMessage(jsonValue);

               

              Key = '';

              Value = '';

              InValue = False;

            }

          }

          else if(InValue)

            Value = Value + JSONString;

        '"':

          {

            InString = not InString;

            if (InString)

            {

              if ((not InKey) && (not InValue))

              {

                InKey = True;

                Key = '';

              }

              else if (InValue)

                Value = '';

            }

            else

            {

              if (InKey)

                InKey = False;

              else if (InValue)

                InValue = False;

            }

          }

          else

            if (InString)

            {

              if (InKey)

                Key = Key + JSONString

              else if (InValue)

                Value = Value + JSONString;

            }

            else

            {

              if (InValue)

                Value = Value + JSONString;

            }

      }

      Inc(i);

    }

  }

  // *****************************JSONParse fonksiyonu****************************

 

  void ComboSelected;

  var

    strValue:String;

  {

    // ComboBox'da seçilen anahtarın value değerini al

    strValue=ClCombo.GetValueIndex(ClCombo.ItemIndex);

    //ShowMessage(strValue);

    clEdit.Text=strValue;

  }

 

  // Main

  {

    MyForm=TCLForm.Create(self);

   

    // Buradaki JSON verisi exchangeratesapi sitesinden API aracılığı ile alınmış örnek bir JSON verisidir

    // 1 Euro'nun kur bilgilerini içermektedir

    qry = TCLJSONQuery.Create(nil);

    qry = Clomosy.ClDataSetFromJSON('[{"success":true,"timestamp":1720586356,"base":"EUR","date":"2024-07-10",

    "rates":{"AED":3.973991,"AFN":77.033984,"ALL":100.39128,"AMD":420.094393,"ANG":1.951768,

    "AOA":942.547486,"ARS":992.430824,"AUD":1.604089,"AWG":1.947525,"AZN":1.838688,"BAM":1.957162,

    "BBD":2.186733,"BDT":127.248585,"BGN":1.956162,"BHD":0.407805,"BIF":3117.184457,"BMD":1.081958,

    "BND":1.462025,"BOB":7.483209,"BRL":5.86237,"BSD":1.083069,"BTC":1.8277493e-5,"BTN":90.409557,

    "BWP":14.654405,"BYN":3.544248,"BYR":21206.380982,"BZD":2.183031,"CAD":1.474871,"CDF":3099.810551,

    "CHF":0.970734,"CLF":0.036682,"CLP":1012.16126,"CNY":7.871892,"CNH":7.888127,"COP":4340.816352,

    "CRC":579.005755,"CUC":1.081958,"CUP":28.671893,"CVE":110.342326,"CZK":25.279415,"DJF":192.834045,

    "DKK":7.459665,"DOP":64.024867,"DZD":145.299452,"EGP":52.007129,"ERN":16.229373,"ETB":62.146051,

    "EUR":1,"FJD":2.41731,"FKP":0.848907,"GBP":0.845712,"GEL":2.964594,"GGP":0.848907,"GHS":16.677687,

    "GIP":0.848907,"GMD":73.30244,"GNF":9325.535137,"GTQ":8.410894,"GYD":226.577734,"HKD":8.451733,

    "HNL":26.822797,"HRK":7.593657,"HTG":143.170331,"HUF":393.887359,"IDR":17588.312717,"ILS":3.979989,

    "IMP":0.848907,"INR":90.325388,"IQD":1418.68763,"IRR":45536.918776,"ISK":149.095306,"JEP":0.848907,

    "JMD":169.758963,"JOD":0.766894,"JPY":174.650154,"KES":138.079754,"KGS":92.661392,"KHR":4457.123458,

    "KMF":491.752529,"KPW":973.762534,"KRW":1497.711427,"KWD":0.331144,"KYD":0.902541,"KZT":520.199353,

    "LAK":23945.88737,"LBP":96984.546613,"LKR":329.245944,"LRD":210.52948,"LSL":19.635868,"LTL":3.194742,

    "LVL":0.654466,"LYD":5.255732,"MAD":10.667927,"MDL":19.2774,"MGA":4869.457418,"MKD":61.535752,

    "MMK":3514.158072,"MNT":3732.755942,"MOP":8.714867,"MRU":42.886054,"MUR":50.646688,"MVR":16.72704,

    "MWK":1877.916004,"MXN":19.35297,"MYR":5.090634,"MZN":68.915371,"NAD":19.635141,"NGN":1677.814689,

    "NIO":39.867939,"NOK":11.474508,"NPR":144.655371,"NZD":1.776308,"OMR":0.416506,"PAB":1.082954,

    "PEN":4.105258,"PGK":4.233967,"PHP":63.105212,"PKR":301.502073,"PLN":4.255797,"PYG":8166.100006,

    "QAR":3.948867,"RON":4.972568,"RSD":117.046379,"RUB":94.668681,"RWF":1416.892929,"SAR":4.057973,

    "SBD":9.127184,"SCR":14.954411,"SDG":650.257133,"SEK":11.415568,"SGD":1.460476,"SHP":1.367,

    "SLE":24.719827,"SLL":22688.12483,"SOS":614.552242,"SRD":32.642961,"STD":22394.350552,

    "SVC":9.475728,"SYP":2718.452931,"SZL":19.628937,"THB":39.350276,"TJS":11.533629,"TMT":3.786854,

    "TND":3.379969,"TOP":2.548338,"TRY":35.612666,"TTD":7.333207,"TWD":35.265356,"TZS":2875.31465,

    "UAH":44.158045,"UGX":4012.793537,"USD":1.081958,"UYU":43.290337,"UZS":13665.51335,

    "VEF":3919450.468026,"VES":39.447913,"VND":27508.787575,"VUV":128.452216,"WST":3.030148,

    "XAF":656.417003,"XAG":0.035144,"XAU":0.000457,"XCD":2.924046,"XDR":0.822584,"XOF":656.423074,

    "XPF":119.331742,"YER":270.895298,"ZAR":19.638499,"ZMK":9738.922608,"ZMW":26.778003,"ZWL":348.390103}}]');

   

    try

     //ShowMessage(qry.getJSONString);

     with qry do

     {

       if (Found)

       {

         First;

         while (not EOF)

         {

          //Burada iç içe olan JSON yapısındaki ihtiyacımız olan 'rates' isimli anahtarın değerini alıyourz

          qryJSONStr=FieldByName('rates').AsString;

          //ShowMessage(qryJSONStr);

          Next;

         }

       }

     }

   except

     ShowMessage('Exception Class: '+LastExceptionClassName+' Exception Message: '+LastExceptionMessage);

   }

   

    //*************************************panel1**************************************

    panel1=MyForm.AddNewProPanel(MyForm, 'panel1');

    clComponent.SetupComponent(panel1,'{

      "Align":"center",

      "Height":150,

      "Width":300,

      "MarginBottom":100,

      "Borderwidth":2,

      "Bordercolor":"#276286",

      "RoundHeight":10,

      "RoundWidth":10

    }');

   

    //*************************************panel2***************************************

    panel2=MyForm.AddNewProPanel(panel1,'panel2');

    clComponent.SetupComponent(panel2,'{

      "Align":"Top",

      "Height":50,

      "MarginTop":6,

      "Width":290

      }');

   

    captionLbl=MyForm.AddNewProLabel(panel2, 'captionLbl', 'EURO KUR BİLGİSİ');

    clComponent.SetupComponent(captionLbl,'{

      "TextColor":"#276286",

      "Textbold":"yes"

    }');

   

    //**************************************panel3*************************************

    panel3=MyForm.AddNewProPanel(panel1,'panel3');

    clComponent.SetupComponent(panel3,'{

      "Align":"Top",

      "Height":50,

      "MarginTop":6,

      "Width":290,

      "BackgroundColor":"#276286"

      }');

   

    clEdit=MyForm.AddNewProEdit(panel3, 'clEdit', '3.973991');

    clComponent.SetupComponent(clEdit,'{

      "Align":"center",

      "Borderwidth":2,

      "Bordercolor":"#276286",

      "MarginRight":60,

      "Height":30,

      "RoundHeight":5,

      "RoundWidth":5

    }');

    clEdit.ReadOnly = True;

   

    ClCombo=MyForm.AddNewComboBox(panel3, 'clCombo');

    clCombo.Height=26;

    clCombo.Align=alCenter;

    clCombo.Width=70;

    clCombo.Margins.Left=140;

   

    JSONParse(qryJSONStr);

   

    MyForm.AddNewEvent(clCombo,tbeOnChange,'ComboSelected');

   

    EUROCaptionLabel=MyForm.AddNewProLabel(panel3, 'EUROCaptionLabel', '1 EURO');

    clComponent.SetupComponent(EUROCaptionLabel,'{

      "Align":"center",

      "MarginRight":150,

      "TextColor":"#FFFFFF",

      "Textbold":"yes"

    }');

   

    MyForm.Run;

  }

 




Mesajı Yazan: Osman
Mesaj Tarihi: 22 Temmuz 2024 Saat 17:11
kodu inceledim fakat direkt kendi çalışmasında sıkıntı var gibi görünüyor panellerde sorun yok her şey normal gözüküyor fakat comboboxın içine herhangi bir veri eklenmiyor tahminimce JsonParse tam çalışmıyor 

    //jsonValue = 'Key: ' + Key + ' Value: ' + Value;

              //ShowMessage(jsonValue);

      bu kısımdaki yorum satırlarını kaldırdığımda ise herhangi bir showmessage çıkmıyor



Mesajı Yazan: Developer
Mesaj Tarihi: 23 Temmuz 2024 Saat 11:49
Merhaba Osman,
Kod herhangi bir sorun gözükmüyor. Beraber bakalım.
Bir de aşağıdaki kodunu inceler misin?
var
  MyForm:TclForm;
  JSONData,clEditStr: String;
  i, nameStart, nameEnd, nameCount: Integer;
  currentName, inputName: string;
  isInsideQuotes, isNameMatched: Boolean;
  clMemo:TCLMemo;
  clEdt:TclProEdit;
  clBtn:TClProButton;
  clLbl:TClProLabel;


  void countName;
  {
    JSONData = '[{"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, ' +
                '{"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, ' +
                '{"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, ' +
                '{"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, ' +
                '{"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}, ' +
                '{"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, ' +
                '{"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, ' +
                '{"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, ' +
                '{"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, ' +
                '{"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}, ' +
                '{"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, ' +
                '{"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, ' +
                '{"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, ' +
                '{"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, ' +
                '{"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}]';
    //name='Ahmet';
    clEditStr=clEdt.Text;
    // JSON verisini işle
    nameCount = 0;
    i = 1;
    isInsideQuotes = False;
    currentName = '';
  
    while (i <= Length(JSONData))
    {
      if (JSONData == '"')
      {
        isInsideQuotes = not isInsideQuotes;
        if (isInsideQuotes)
          nameStart = i + 1
        else
        {
          nameEnd = i - 1;
          currentName = '';
          
          // İsim değerini çıkar
          while (nameStart <= nameEnd)
          {
            currentName = currentName + JSONData[nameStart];
            Inc(nameStart);
          }
  
          // İsim eşleşmesi kontrolü
          isNameMatched = True;
          if (Length(currentName) == Length(clEditStr))
          {
            for (nameStart = 1 to Length(currentName))
            {
              if (currentName[nameStart] <> clEditStr[nameStart])
              {
                isNameMatched = False;
                Break;
              }
            }
          }
          else
            isNameMatched = False;
  
          // Eşleşme varsa sayacı artır
          if (isNameMatched)
            Inc(nameCount);
        }
      }
      Inc(i);
    }
    if(nameCount==0)
      ShowMessage('Girdiğiniz isim yoktur');
    else
      {
        // Sonucu ekrana yazdır
        ShowMessage('Girdiğiniz isimden '+ IntToStr(nameCount)+ ' tane var.');
      }
    
  }
  
  // ************************** Main **********************************
  {
    MyForm=TclForm.Create(Self);
    
    // Örnek JSON verisi
    JSONData = '[{"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, ' +
                '{"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, ' +
                '{"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, ' +
                '{"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, ' +
                '{"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}, ' +
                '{"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, ' +
                '{"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, ' +
                '{"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, ' +
                '{"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, ' +
                '{"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}, ' +
                '{"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, ' +
                '{"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, ' +
                '{"isim": "Ali"}, {"isim": "Zeynep"}, {"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, ' +
                '{"isim": "Ahmet"}, {"isim": "Ahmet"}, {"isim": "Mehmet"}, {"isim": "Ayşe"}, {"isim": "Ali"}, {"isim": "Zeynep"}, ' +
                '{"isim": "Ali"}, {"isim": "Elif"}, {"isim": "Emre"}, {"isim": "Ali"}, {"isim": "Ahmet"}, {"isim": "Ahmet"}]';
    
    clMemo=MyForm.AddNewMemo(MyForm,'clMemo', '');
    clMemo.Align=alCenter;
    clMemo.Height=400;
    clMemo.Width=350;
    clMemo.Margins.Bottom=200;
    clMemo.ReadOnly= True;
    clMemo.TextSettings.WordWrap = True;
    clMemo.Text=JSONData;
    
    clLbl=MyForm.AddNewProLabel(MyForm, 'clLbl', 'Hangi isimden kaç tane olduğunu bulmak istediğiniz ismi giriniz:');
    clComponent.SetupComponent(clLbl,'{"Align":"Center",
      "Width":500,
      "Height":50,
      "MarginTop":280,
      "TextSize":16
    }');
    
    clEdt=MyForm.AddNewProEdit(MyForm, 'clEdt', 'isim giriniz');
    clComponent.SetupComponent(clEdt,'{"Align":"Center",
      "BorderColor":"#652020",
      "RoundHeight":10,
      "RoundWidth":10,
      "BorderWidth":2,
      "Width":150,
      "MarginTop":350
    }');
    
    
    
    clBtn=MyForm.AddNewProButton(MyForm, 'clBtn', 'İsim sayısını bul');
    clComponent.SetupComponent(clBtn,'{"clBtn":"Center",
      "BorderColor":"#652020",
      "RoundHeight":10,
      "RoundWidth":10,
      "BorderWidth":2,
      "Width":150,
      "MarginTop":450
    }');
    
    MyForm.AddNewEvent(clBtn,tbeOnClick,'countName');
    
    //countName;
    
    MyForm.Run;
  }




Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 12.07 - https://www.webwizforums.com
Copyright ©2001-2024 Web Wiz Ltd. - https://www.webwiz.net