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}]}}
Kod: Tümünü seç
{
"Alan1":"Merhaba Dünya :)",
"Alan2":
{
"Alan3":"Alan Verisi",
"Alan4":"Alan Verisi",
"Alan5":false,
"Alan6":
[
{
"ErrorCode":null,
"ErrorMessage":null
}
]
}
}
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;