Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
json parse
#1
arkadaşlar merhabalar bir konu hakkında yardıma ihtiyacım var. bir json veri paketini parse etmkete sorun yşıyorum yardımlarınız bekliyorum. delphi xe2 kullanıyorum.

json verisi:

{
  "durum": 1,
 "sonuc": {
   "RECETE_BILGISI": {
     "RECETE_TARIHI": {
       "value": "20181011000000"
     },
     "RECETE_NUMARASI": {
       "value": "xxxxx"
     },
     "RECETE_TURU": {
       "version": "1",
       "codeSystemGuid": "c2fbe9bb-f6b3-4cb5-8670-47890ed7ed4b",
       "code": "1",
       "value": "NORMAL"
     },
     "HEKIM_KIMLIK_NUMARASI": {
       "value": "xxxx"
     },
     "ILAC_BILGISI": [
        {
          "ILAC_BARKODU": {
            "value": "8699636090930"
          },
          "ILAC_ADI": {
            "value": "JANUMET 50/850 MG 56 FILM KAPLI TABLET"
          },
          "KUTU_ADETI": {
            "value": "4"
          },
          "ILAC_KULLANIM_SEKLI": {
            "version": "1",
            "codeSystemGuid": "32d57611-4928-46da-afac-624aaaa388d8",
            "code": "1",
            "value": "AĞIZDAN (ORAL)"
          },
          "ILAC_KULLANIM_SAYISI": {
            "value": "2"
          },
          "ILAC_KULLANIM_DOZU": {
            "value": "1"
          },
          "ILAC_KULLANIM_PERIYODU": {
            "value": "1"
          },
          "ILAC_KULLANIM_PERIYODU_BIRIMI": {
            "version": "1",
            "codeSystemGuid": "64408499-b82a-4e64-805e-e821aa0c64c9",
            "code": "3",
            "value": "GÜN"
          },
          "ILAC_ACIKLAMA": {
            "value": ""
          }
        },
        {
          "ILAC_BARKODU": {
            "value": "8699569090618"
          },
          "ILAC_ADI": {
            "value": "ATEROZ 20 MG.30 FILM TABLET"
          },
          "KUTU_ADETI": {
            "value": "3"
          },
          "ILAC_KULLANIM_SEKLI": {
            "version": "1",
            "codeSystemGuid": "32d57611-4928-46da-afac-624aaaa388d8",
            "code": "1",
            "value": "AĞIZDAN (ORAL)"
          },
          "ILAC_KULLANIM_SAYISI": {
            "value": "1"
          },
          "ILAC_KULLANIM_DOZU": {
            "value": "1"
          },
          "ILAC_KULLANIM_PERIYODU": {
            "value": "1"
          },
          "ILAC_KULLANIM_PERIYODU_BIRIMI": {
            "version": "1",
            "codeSystemGuid": "64408499-b82a-4e64-805e-e821aa0c64c9",
            "code": "3",
            "value": "GÜN"
          },
          "ILAC_ACIKLAMA": {
            "value": ""
          }
        },
        {
          "ILAC_BARKODU": {
            "value": "8699625960138"
          },
          "ILAC_ADI": {
            "value": "VAXIGRIP (ASI) 0.5 ML 1 KULL HAZIR ENJ"
          },
          "KUTU_ADETI": {
            "value": "1"
          },
          "ILAC_KULLANIM_SEKLI": {
            "version": "1",
            "codeSystemGuid": "32d57611-4928-46da-afac-624aaaa388d8",
            "code": "1",
            "value": "AĞIZDAN (ORAL)"
          },
          "ILAC_KULLANIM_SAYISI": {
            "value": "1"
          },
          "ILAC_KULLANIM_DOZU": {
            "value": "1"
          },
          "ILAC_KULLANIM_PERIYODU": {
            "value": "1"
          },
          "ILAC_KULLANIM_PERIYODU_BIRIMI": {
            "version": "1",
            "codeSystemGuid": "64408499-b82a-4e64-805e-e821aa0c64c9",
            "code": "3",
            "value": "GÜN"
          },
          "ILAC_ACIKLAMA": {
            "value": ""
          }
        },
        {
          "ILAC_BARKODU": {
            "value": "8699514350064"
          },
          "ILAC_ADI": {
            "value": "ECTOPIX %0,1 KREM (30 GR)"
          },
          "KUTU_ADETI": {
            "value": "2"
          },
          "ILAC_KULLANIM_SEKLI": {
            "version": "1",
            "codeSystemGuid": "32d57611-4928-46da-afac-624aaaa388d8",
            "code": "1",
            "value": "AĞIZDAN (ORAL)"
          },
          "ILAC_KULLANIM_SAYISI": {
            "value": "3"
          },
          "ILAC_KULLANIM_DOZU": {
            "value": "1"
          },
          "ILAC_KULLANIM_PERIYODU": {
            "value": "1"
          },
          "ILAC_KULLANIM_PERIYODU_BIRIMI": {
            "version": "1",
            "codeSystemGuid": "64408499-b82a-4e64-805e-e821aa0c64c9",
            "code": "3",
            "value": "GÜN"
          },
          "ILAC_ACIKLAMA": {
            "value": ""
          }
        },
        {
          "ILAC_BARKODU": {
            "value": "8699525094711"
          },
          "ILAC_ADI": {
            "value": "DILATREND 25 MG 30 TB"
          },
          "KUTU_ADETI": {
            "value": "6"
          },
          "ILAC_KULLANIM_SEKLI": {
            "version": "1",
            "codeSystemGuid": "32d57611-4928-46da-afac-624aaaa388d8",
            "code": "1",
            "value": "AĞIZDAN (ORAL)"
          },
          "ILAC_KULLANIM_SAYISI": {
            "value": "2"
          },
          "ILAC_KULLANIM_DOZU": {
            "value": "1"
          },
          "ILAC_KULLANIM_PERIYODU": {
            "value": "1"
          },
          "ILAC_KULLANIM_PERIYODU_BIRIMI": {
            "version": "1",
            "codeSystemGuid": "64408499-b82a-4e64-805e-e821aa0c64c9",
            "code": "3",
            "value": "GÜN"
          },
          "ILAC_ACIKLAMA": {
            "value": ""
          }
        }
      ]
   }
 },
 "mesaj": null
}
Cevapla
#2
Nerede, nasıl bir sorun yaşıyorsunuz?
Forumda arama yaptınız mı?

Bir çok kez örneklendirildi:
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
There's no place like 127.0.0.1
WWW
Cevapla
#3
Merhaba,
Maksat JSON veriyi işlemek ise, @SimaWB nin de belirttiği gibi formda bir çok örneği mevcuttur.

Örnek:

recete.png
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#4
benim şu şekilde parse etmeye çalışıyorum;
   
TRECETE_TARIHI = packed record
    value:string;
    end;

    TRECETE_NUMARASI = packed record
    value:string;
    end;

    TRECETE_TURU = packed record
    value:string;
    version:string;
    codeSystemGuid:string;
    code:string;
    end;

    THEKIM_KIMLIK_NUMARASI = packed record
    value:string;
    end;

    TILAC_BARKODU = packed record
    value:string;
    end;

    TILAC_ADI = packed record
    value:string;
    end;

    TKUTU_ADETI = packed record
    value:string;
    end;

    TILAC_KULLANIM_SEKLI = packed record
    value:string;
    version:string;
    codeSystemGuid:string;
    code:string;
    end;

    TILAC_KULLANIM_SAYISI = packed record
    value:string;
    end;

    TILAC_KULLANIM_DOZU = packed record
    value:string;
    end;

    TILAC_KULLANIM_PERIYODU = packed record
    value:string;
    end;

    TILAC_KULLANIM_PERIYODU_BIRIMI = packed record
    value:string;
    version:string;
    codeSystemGuid:string;
    code:string;
    end;

    TILAC_ACIKLAMA = packed record
    value:string;
    end;

    TILAC_BILGISI = packed record
    ILAC_BARKODU:TILAC_BARKODU;
    ILAC_ADI:TILAC_ADI;
    KUTU_ADETI:TKUTU_ADETI;
    ILAC_KULLANIM_SEKLI:TILAC_KULLANIM_SEKLI;
    ILAC_KULLANIM_SAYISI:TILAC_KULLANIM_SAYISI;
    ILAC_KULLANIM_DOZU:TILAC_KULLANIM_DOZU;
    ILAC_KULLANIM_PERIYODU:TILAC_KULLANIM_PERIYODU;
    ILAC_KULLANIM_PERIYODU_BIRIMI:TILAC_KULLANIM_PERIYODU_BIRIMI;
    ILAC_ACIKLAMA:TILAC_ACIKLAMA;
    end;


    TILAC_BILGISISONUC = TArray<TILAC_BILGISI>;

    TRECETE_BILGISI = packed record
    RECETE_TARIHI:TRECETE_TARIHI;
    RECETE_NUMARASI:TRECETE_NUMARASI;
    RECETE_TURU:TRECETE_TURU;
    HEKIM_KIMLIK_NUMARASI:THEKIM_KIMLIK_NUMARASI;
    ILAC_BILGISI:TILAC_BILGISISONUC
    end;

    TRECETE_BILGISISONUC =TRECETE_BILGISI;

    TResultRECETE = packed record
    durum: Smallint;
    sonuc: TRECETE_BILGISISONUC;
    mesaj: string;
    end;

bu şekilde json yapısını oluşturduktan sonra;

procedure TForm1.JSonSonucuGosterHastaRecete(Str:String);
var
 JsonRecord: TResultRECETE;
 JsonString: string;
 i: Integer;
begin
 ClientDataSet1.EmptyDataSet();
 JsonString := StringReplace(Str,'@','', [rfReplaceAll]);

 if not RecordLoadJSON(JsonRecord,StringToUTF8(JsonString), TypeInfo(TResultRECETE)) then
 begin
   ShowMessage('Json ayıklanamadı');
 end
 else
 begin
   if JsonRecord.durum = 1 then
   begin
       ClientDataSet1.Append();
       ClientDataSet1.FieldByName('RECETE_BILGISI').AsString := JsonRecord.sonuc.RECETE_TARIHI.value;
       ClientDataSet1.FieldByName('RECETE_NUMARASI').AsString := JsonRecord.sonuc.RECETE_NUMARASI.value;
       ClientDataSet1.FieldByName('RECETE_TURU').AsString := JsonRecord.sonuc.RECETE_TURU.value;
       ClientDataSet1.FieldByName('HEKIM_KIMLIK_NUMARASI').AsString := JsonRecord.sonuc.HEKIM_KIMLIK_NUMARASI.value;
       for i := Low(JsonRecord.sonuc.ILAC_BILGISI) to High(JsonRecord.sonuc.ILAC_BILGISI) do
       begin
       //Application.ProcessMessages;
         if (ClientDataSet1.State<>dsedit) and (ClientDataSet1.State<>dsInsert)  then
         begin
         ClientDataSet1.Append();
         ClientDataSet1.FieldByName('RECETE_BILGISI').AsString := JsonRecord.sonuc.RECETE_TARIHI.value;
         ClientDataSet1.FieldByName('RECETE_NUMARASI').AsString := JsonRecord.sonuc.RECETE_NUMARASI.value;
         ClientDataSet1.FieldByName('RECETE_TURU').AsString := JsonRecord.sonuc.RECETE_TURU.value;
         ClientDataSet1.FieldByName('HEKIM_KIMLIK_NUMARASI').AsString := JsonRecord.sonuc.HEKIM_KIMLIK_NUMARASI.value;
         end;
         ClientDataSet1.FieldByName('ILAC_BARKODU').AsString       := JsonRecord.sonuc.ILAC_BILGISI[i].ILAC_BARKODU.value;
         ClientDataSet1.FieldByName('ILAC_ADI').AsString     := JsonRecord.sonuc.ILAC_BILGISI[i].ILAC_ADI.value;
         ClientDataSet1.FieldByName('KUTU_ADETI').AsString         := JsonRecord.sonuc.ILAC_BILGISI[i].KUTU_ADETI.value;
         ClientDataSet1.FieldByName('ILAC_KULLANIM_SEKLI').AsString    := JsonRecord.sonuc.ILAC_BILGISI[i].ILAC_KULLANIM_SEKLI.value;
         ClientDataSet1.FieldByName('ILAC_KULLANIM_SAYISI').AsString    := JsonRecord.sonuc.ILAC_BILGISI[i].ILAC_KULLANIM_SAYISI.value;
         ClientDataSet1.FieldByName('ILAC_KULLANIM_DOZU').AsString    := JsonRecord.sonuc.ILAC_BILGISI[i].ILAC_KULLANIM_DOZU.value;
         ClientDataSet1.FieldByName('ILAC_KULLANIM_PERIYODU').AsString    := JsonRecord.sonuc.ILAC_BILGISI[i].ILAC_KULLANIM_PERIYODU.value;
         ClientDataSet1.FieldByName('ILAC_KULLANIM_PERIYODU_BIRIMI').AsString    := JsonRecord.sonuc.ILAC_BILGISI[i].ILAC_KULLANIM_PERIYODU_BIRIMI.value;
         ClientDataSet1.FieldByName('ILAC_ACIKLAMA').AsString    := JsonRecord.sonuc.ILAC_BILGISI[i].ILAC_ACIKLAMA.value;

         ClientDataSet1.Post();
         Application.ProcessMessages;
       end;
   end
   else
   ShowMessage(JsonRecord.mesaj);
 end;

Json ayıklanamadı hatası geliyor.
Cevapla
#5
Öncelikle yazdıklarınızı kod tagları içine alın ki okuması kolay olsun. İkincisi "Hata veriyor, çalışmıyor" diye genel betimlemeler yapmayın. Hatanın hangi satırda, hangi metodda ve ne mesajı ile verdiğini detaylıca belirtin ki, size yardımcı olmak isteyen arkadaşlar adına bir faydanız olsun. Üçüncüsü; hata olduğunuz rutinin kaynak kodlarını paylaşmaz iseniz insanlardan nasıl bir yardım bekleyebilirsiniz (Bahsettiğim; RecordLoadJson metodu).

Ayrıca öncelikle sizin için önerilen linkleri de incelemeyi unutmayın lütfen.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#6
(11-10-2018, Saat: 16:15)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Öncelikle yazdıklarınızı kod tagları içine alın ki okuması kolay olsun. İkincisi "Hata veriyor, çalışmıyor" diye genel betimlemeler yapmayın. Hatanın hangi satırda, hangi metodda ve ne mesajı ile verdiğini detaylıca belirtin ki, size yardımcı olmak isteyen arkadaşlar adına bir faydanız olsun. Üçüncüsü; hata olduğunuz rutinin kaynak kodlarını paylaşmaz iseniz insanlardan nasıl bir yardım bekleyebilirsiniz (Bahsettiğim; RecordLoadJson metodu).

Ayrıca öncelikle sizin için önerilen linkleri de incelemeyi unutmayın lütfen.

@Fesih ARSLAN hocam,

Forumun ana ekranına bu şekilde Tuğrul hocamın yazdığı (bir kaç ekleme yapılabilir) hususlar ile bir soru sorulurken dikkat edilmesi gerekenler konulsa ya da referans verebileceğimiz öyle bir link olsa süper olur.
Cevapla
#7
(11-10-2018, Saat: 17:55)edo Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(11-10-2018, Saat: 16:15)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Öncelikle yazdıklarınızı kod tagları içine alın ki okuması kolay olsun. İkincisi "Hata veriyor, çalışmıyor" diye genel betimlemeler yapmayın. Hatanın hangi satırda, hangi metodda ve ne mesajı ile verdiğini detaylıca belirtin ki, size yardımcı olmak isteyen arkadaşlar adına bir faydanız olsun. Üçüncüsü; hata olduğunuz rutinin kaynak kodlarını paylaşmaz iseniz insanlardan nasıl bir yardım bekleyebilirsiniz (Bahsettiğim; RecordLoadJson metodu).

Ayrıca öncelikle sizin için önerilen linkleri de incelemeyi unutmayın lütfen.

@Fesih ARSLAN hocam,

Forumun ana ekranına bu şekilde Tuğrul hocamın yazdığı (bir kaç ekleme yapılabilir) hususlar ile bir soru sorulurken dikkat edilmesi gerekenler konulsa ya da referans verebileceğimiz öyle bir link olsa süper olur.

Yardım sayfamıza bununla ilgili (Soru nasıl sorulmalı veya bir konuyu açarken dikkat edilmesi gereken hususlar vb.) bir bölüm ekleyebiliriz. 
Bunun  hiç zamanım yok. Yönetici arkadaşlardan veya üyelerimizden biri günülü olarak bir html hazırlayabilir ise yardım sayfamızdan bir link veririz.
Günüllü birini bulamazsak, iş başa düşecek. Müsait bir zamanımda hazırlayabilirim.
Öneriniz için teşekkür ederim.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#8
ustadlar tavsiyeleriniz için teşekkür ederim. ben başka yerlerden yardım almaya çalışayım. yine de zaman ayırdığınız için teşekkürler.

function RecordLoadJSON(var Rec; JSON: PUTF8Char; TypeInfo: pointer;
  EndOfObject: PUTF8Char=nil): PUTF8Char;
var wasString, wasValid: boolean;
   Reader: TDynArrayJSONCustomReader;
   EndOfObj: AnsiChar;
   Val: PUTF8Char;
begin // code below must match TTextWriter.AddRecordJSON
 result := nil; // indicates error
 if JSON=nil then
   exit;
 if (@Rec=nil) or (TypeInfo=nil) then
   raise ESynException.CreateUTF8('Invalid RecordLoadJSON(%) call',[TypeInfo]);
 if JSON^=' ' then repeat inc(JSON); if JSON^=#0 then exit; until JSON^<>' ';
 if PCardinal(JSON)^=JSON_BASE64_MAGIC_QUOTE then begin
   if not (PTypeKind(TypeInfo)^ in tkRecordTypes) then
     raise ESynException.CreateUTF8('RecordLoadJSON(%/%)',
       [PShortString(@PTypeInfo(TypeInfo).NameLen)^,PByte(TypeInfo)^]);
   Val := GetJSONField(JSON,JSON,@wasString,@EndOfObj);
   if (Val=nil) or (not wasString) or
      (PInteger(Val)^ and $00ffffff<>JSON_BASE64_MAGIC) or
      (RecordLoad(Rec,pointer(Base64ToBin(Val+3)),TypeInfo)=nil) then
     exit; // invalid content
 end else begin
   if not GlobalJSONCustomParsers.RecordSearch(TypeInfo,Reader) then
     exit;
   JSON := Reader(JSON,Rec,wasValid);
   if not wasValid then
     exit;
   if (JSON<>nil) and (JSON^ in [#1..' ']) then
     repeat inc(JSON) until not(JSON^ in [#1..' ']);
   if (JSON<>nil) and (JSON^<>#0) then begin
     EndOfObj := JSON^;
     inc(JSON);
   end else
     EndOfObj := #0;
 end;
 if JSON=nil then
   result := @NULCHAR else
   result := JSON;
 if EndOfObject<>nil then
   EndOfObject^ := EndOfObj;
end;

function RecordLoadJSON(var Rec; const JSON: RawUTF8; TypeInfo: pointer): boolean;
var tmp: TSynTempBuffer;
begin
 tmp.Init(JSON);
 try
   result := RecordLoadJSON(Rec,tmp.buf,TypeInfo)<>nil;
 finally
   tmp.Done;
 end;
end;
(11-10-2018, Saat: 16:15)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Öncelikle yazdıklarınızı kod tagları içine alın ki okuması kolay olsun. İkincisi "Hata veriyor, çalışmıyor" diye genel betimlemeler yapmayın. Hatanın hangi satırda, hangi metodda ve ne mesajı ile verdiğini detaylıca belirtin ki, size yardımcı olmak isteyen arkadaşlar adına bir faydanız olsun. Üçüncüsü; hata olduğunuz rutinin kaynak kodlarını paylaşmaz iseniz insanlardan nasıl bir yardım bekleyebilirsiniz (Bahsettiğim; RecordLoadJson metodu).

Ayrıca öncelikle sizin için önerilen linkleri de incelemeyi unutmayın lütfen.
Cevapla
#9
@PİRSUS23

Merhaba,
Konuyla ilgili bir gelişme var mı?
Cevapla
#10
Restclient componentini kullanmanizi onerrim yukarida benim actigim konu linki verilmis zaten
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Thumbs Up Json Parse AV Hatası yhackup 0 104 02-09-2019, Saat: 13:27
Son Yorum: yhackup
  XML Json dosyaları ile Çalışma masteryoda 9 1.871 02-08-2019, Saat: 11:20
Son Yorum: TheEAK
  Json Parse Etme faktoral 3 267 01-08-2019, Saat: 08:50
Son Yorum: SimaWB
  Json Free Etmek yhackup 4 548 31-07-2019, Saat: 11:17
Son Yorum: Halil Han Badem
  REST.Json, TJSon.JsonToObject sorunsalı Gürcan 14 1.128 27-05-2019, Saat: 11:33
Son Yorum: SimaWB



Konuyu Okuyanlar: 1 Ziyaretçi