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:
http://www.delphican.com/delphi-json-parse.html
http://www.delphican.com/json-veri-okuma.html
http://www.delphican.com/delphi-ile-json-parseleme.html
http://www.delphican.com/delphi-ile-json...slemi.html
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ı: Ö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ı:
(11-10-2018, Saat: 16:15)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Ö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ı: Ö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
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  JSON UTF8 Sorunu pro_imaj 0 166 05-05-2020, Saat: 00:26
Son Yorum: pro_imaj
  JSON to Dataset pro_imaj 9 1.295 06-01-2020, Saat: 10:42
Son Yorum: pro_imaj
  Json Parse hatası arsl01 2 473 04-01-2020, Saat: 18:31
Son Yorum: arsl01
  JSON TRESTRequest Nesnesi Hatası pro_imaj 2 557 31-12-2019, Saat: 13:55
Son Yorum: pro_imaj
Thumbs Up Json Parse AV Hatası yhackup 0 434 02-09-2019, Saat: 13:27
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi