tek satır gelen bir Json verisini düzenleme

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

tek satır gelen bir Json verisini düzenleme

Mesaj gönderen ender_arslanturk »

Selâmlar,

Tek satır gelen karışık bir json'ı çözebilmek için geliştirdiğim basit bir fonksiyon..

Kod: Tümünü seç

{"Alan1":"Merhaba dünya :)","Alan2":{"Alan3":"Alan Verisi","Alan4":"Alan Verisi","Alan5":false,"Alan6":[{"Alan7":null,"alan8":null}]}}
verisini

Kod: Tümünü seç

{
         "Alan1":"Merhaba Dünya :)",
         "Alan2":
         {
                  "Alan3":"Alan Verisi",
                  "Alan4":"Alan Verisi",
                  "Alan5":false,
                  "Alan6":
                  [
                           {
                                    "ErrorCode":null,
                                    "ErrorMessage":null
                           }
                  ]
         }
}
olarak düzenler.. Ben boşluklara 9 yazdım. Siz, 6 yapabilirsiniz.




Uses StrUtils;

JsonDuzelt1 : Wordwrap özelliği False olan bir memo nesnesi.
JsonDuzelt2 : Wordwrap özelliği False olan bir memo nesnesi.

BoslukA : Boşluk karakter sayısını 9 artırmak için
BoslukE : Boşluk karakter sayısını 9 eksiltmesi için


Kod: Tümünü seç

Function JsonDuzelt(Json:String):String;
var
        Ilk:Byte;
        I:Integer;
        s:string;
        Bosluk:String;

        {$REGION ' Fonksiyonlar ''}
        Function BoslukA:String;
        begin
                Bosluk:=Bosluk+'         ';
        end;

        Function BoslukE:String;
        begin
                Bosluk:=AnsiLeftStr(Bosluk, Length(Bosluk)-9);
        end;
        {$ENDREGION}
begin
        Result:='';
        {$REGION ' Kontrol1 ''}
        s:=Json;
        s:=AnsiReplaceText(s, '{',  #13+#10+'{'+#13+#10);
        s:=AnsiReplaceText(s, '}',  #13+#10+'}'+#13+#10);

        s:=AnsiReplaceText(s, '[',  #13+#10+'['+#13+#10);
        s:=AnsiReplaceText(s, ']',  #13+#10+']'+#13+#10);

        s:=AnsiReplaceText(s, ',',  ','+#13+#10);
        {$ENDREGION}

        {$REGION ' Kontrol2 ''}
        JsonDuzelt1.Text:=s;
        JsonDuzelt2.Clear;
        For I:=0 To JsonDuzelt1.Lines.Count-1 do
        If Trim(JsonDuzelt1.Lines.Strings[I])<>'' Then
        JsonDuzelt2.Lines.Add(Trim(JsonDuzelt1.Lines.Strings[I]));
        {$ENDREGION}

        {$REGION ' Kontrol3 ''}
        Ilk:=0;
        For I:=0 To JsonDuzelt2.Lines.Count-1 do
        If Trim(JsonDuzelt2.Lines.Strings[I])<>'' Then
        If Trim(JsonDuzelt2.Lines.Strings[I+1])<>'' Then
        begin
                If
                      (Trim(JsonDuzelt2.Lines.Strings[I])='{')
                      or
                      (Trim(JsonDuzelt2.Lines.Strings[I])='[')
                Then
                begin
                        If Ilk=1 Then
                        JsonDuzelt2.Lines.Strings[I]:=Bosluk+Trim(JsonDuzelt2.Lines.Strings[I]);

                        BoslukA;

                        JsonDuzelt2.Lines.Strings[I+1]:=Bosluk+Trim(JsonDuzelt2.Lines.Strings[I+1]);
                        Ilk:=1;
                end
                else
                If
                      (Trim(JsonDuzelt2.Lines.Strings[I])='}')
                      or
                      (Trim(JsonDuzelt2.Lines.Strings[I])=']')
                Then
                begin
                        BoslukE;
                        JsonDuzelt2.Lines.Strings[I]:=Bosluk+Trim(JsonDuzelt2.Lines.Strings[I]);
                end
                else
                JsonDuzelt2.Lines.Strings[I]:=Bosluk+Trim(JsonDuzelt2.Lines.Strings[I]);

                Application.ProcessMessages;
        end;
        {$ENDREGION}


        Result:=JsonDuzelt2.Text;

end;

İyi çalışmalar..
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: tek satır gelen bir Json verisini düzenleme

Mesaj gönderen sabanakman »

Elinize sağlık. Aynı işi yapan hazır fonksiyon da kullanılabilir.

Kod: Tümünü seç

uses System.JSON, REST.Json;

function FormatJSON(const AJSon: String): String;
var
  tmpJson: TJSONValue;
begin
  tmpJson := TJSONObject.ParseJSONValue(AJSon);
  Result := TJson.Format(tmpJson);
  FreeAndNil(tmpJson);
end;
gibi. Tabi yukarıda belirttiğiniz gibi alıştırmalar yapmak konuyu anlamada da daha faydalı olabilir.
En son sabanakman tarafından 28 Eki 2020 01:43 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Re: tek satır gelen bir Json verisini düzenleme

Mesaj gönderen ender_arslanturk »

Teşekkür ederim. Çok daha iyi oldu.
Cevapla