iMerhabalar
X superobject ile iç içe 2 array ı nasıl okuruz?
Yada başka bir yöntemle de olabilir.
tek katmanlı olduğu zaman okumakta sorun olmuyor fakat iç içe
olduğu zaman tip hataları geliyor
rings arrayını nasıl okur?
Örnek
{
"name": "OBJECTID",
"FieldName": "",
"Type": "Polygon",
"fields": [
{
"name": "GID",
"alias": "GID",
"type": "FieldTypeInteger"
}
],
"features": [
{
"attributes": {
"GID": 32289
},
"geometry": {
"rings": [
[
[
47.213439779999987,
41.039492069999994
],
[
47.213007080000011,
41.039838900000007
]
]
]
}
}
}
iç içe json okuma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: iç içe json okuma
Merhaba,
Verdiğiniz Json geçerli değil. İlk bozulma "geometry": { ile başlıyor. { işareti sonrası değişken adı ve değeri geliyor olmalı idi. Ardından "rings": [ ifadesinden sonra { ile devam etmesi gerekli idi. 47.213... gibi değerlerin bir değişken adı olması gerekli idi.
Geçerli bir Json örnek verebilir iseniz yardımcı olmaya çalışırım.
Verdiğiniz Json geçerli değil. İlk bozulma "geometry": { ile başlıyor. { işareti sonrası değişken adı ve değeri geliyor olmalı idi. Ardından "rings": [ ifadesinden sonra { ile devam etmesi gerekli idi. 47.213... gibi değerlerin bir değişken adı olması gerekli idi.
Geçerli bir Json örnek verebilir iseniz yardımcı olmaya çalışırım.
Re: iç içe json okuma
Merhaba
Json daki parantesi hatalarının düzeldiğini varsayarsak 2 yöntem ile yapılabilir
1. yöntem;
var
Obj: TJsonObject;
begin
Obj := TJsonObject.ParseFromFile('json içerikli dosya') as TJsonObject;
try
ShowMessage(Obj['name']);
ShowMessage(IntToStr(Obj['features'].Items[0]['attributes']['GID']));
ShowMessage(Obj['features'].Items[0]['geometry']['rings'].Items[0].Items[0].Items[0].VariantValue);
finally
Obj.Free;
end;
end;
2. yöntem;
var
X: ISuperObject;
Arr:ISuperArray;
begin
X := TSuperObject.ParseFile('json içerikli dosya'');
ShowMessage( X['"name"'].AsString );
ShowMessage( X['features[0].attributes.GID'].AsString );
Arr:=X['features[0].geometry.rings'].AsArray;
Arr:=Arr.A[0];
Arr:=Arr.A[0];
ShowMessage( Arr.V[0] );//1. sayı
Arr:=X['features[0].geometry.rings'].AsArray;
Arr:=Arr.A[0];
Arr:=Arr.A[0];
ShowMessage( Arr.V[1] );//2. sayı
Arr:=X['features[0].geometry.rings'].AsArray;
Arr:=Arr.A[0];
Arr:=Arr.A[1];
ShowMessage( Arr.V[0] );//3. sayı
Arr:=X['features[0].geometry.rings'].AsArray;
Arr:=Arr.A[0];
Arr:=Arr.A[1];
ShowMessage( Arr.V[1] );//4. sayı
end;
Json daki parantesi hatalarının düzeldiğini varsayarsak 2 yöntem ile yapılabilir
1. yöntem;
var
Obj: TJsonObject;
begin
Obj := TJsonObject.ParseFromFile('json içerikli dosya') as TJsonObject;
try
ShowMessage(Obj['name']);
ShowMessage(IntToStr(Obj['features'].Items[0]['attributes']['GID']));
ShowMessage(Obj['features'].Items[0]['geometry']['rings'].Items[0].Items[0].Items[0].VariantValue);
finally
Obj.Free;
end;
end;
2. yöntem;
var
X: ISuperObject;
Arr:ISuperArray;
begin
X := TSuperObject.ParseFile('json içerikli dosya'');
ShowMessage( X['"name"'].AsString );
ShowMessage( X['features[0].attributes.GID'].AsString );
Arr:=X['features[0].geometry.rings'].AsArray;
Arr:=Arr.A[0];
Arr:=Arr.A[0];
ShowMessage( Arr.V[0] );//1. sayı
Arr:=X['features[0].geometry.rings'].AsArray;
Arr:=Arr.A[0];
Arr:=Arr.A[0];
ShowMessage( Arr.V[1] );//2. sayı
Arr:=X['features[0].geometry.rings'].AsArray;
Arr:=Arr.A[0];
Arr:=Arr.A[1];
ShowMessage( Arr.V[0] );//3. sayı
Arr:=X['features[0].geometry.rings'].AsArray;
Arr:=Arr.A[0];
Arr:=Arr.A[1];
ShowMessage( Arr.V[1] );//4. sayı
end;
Ahmet DENİZ