Autor Téma: XSuperObject - iterace  (Přečteno 495 krát)

Offline J_M

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 0
XSuperObject - iterace
« kdy: 31-07-2019, 14:39:47 »
Zdravím, používám knihovnu X-SuperObject a nemůžu přít na to, jak z ISuperObject dostat elementy které obsahuje.

Příklad, mám takový json:

{"RECIPES":{"RECIPE":[{"NAME":"...

Normálně bych použil tohle: Obj.o['RECIPES'].a['RECIPE'] abych se dostal k array RECIPE

ale jak zjistím, zda objekt RECIPES obsahuje array RECIPE, nebo další jiné prvky pokud je neznám?
Díky za rady.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1126
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:XSuperObject - iterace
« Odpověď #1 kdy: 31-07-2019, 16:34:13 »
Stačí se podívat do zdrojáků. Většinou tam je nějaká property, která vrací typ - u objektu by to mělo být možné zjistit přes DataType

Offline J_M

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 0
Re:XSuperObject - iterace
« Odpověď #2 kdy: 31-07-2019, 17:20:46 »
Stačí se podívat do zdrojáků. Většinou tam je nějaká property, která vrací typ - u objektu by to mělo být možné zjistit přes DataType

Ano, DataType tam je a používám, ale to je něco jiného. Potřeboval bych iterovat objekt a získat všechny elementy které obsahuje. Ze zdrojáků jsem právě nabyl dojmu, že to nelze a tak se ptám zde. Třeba jsem něco přehlédl.

Edit: No, ono by to šlo, ale musel bych vrtat i do unity toho Superobjektu a tomu bych rád vyhnul, tak doufám, že jsem ve změti těch intefejsů a přetypování něco přehlédl nebo nepochopil.
« Poslední změna: 31-07-2019, 17:35:56 od J_M »

Offline J_M

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 0
Re:XSuperObject - iterace
« Odpověď #3 kdy: 31-07-2019, 18:24:32 »
Už to mám, je tam fce GetEnumerator a s tím jde nějak pracovat.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1126
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:XSuperObject - iterace
« Odpověď #4 kdy: 31-07-2019, 22:29:44 »
Aha, tak to jsem nepochopil. Asi to půjde i přes cyklus Count a AsArray

Offline J_M

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 0
Re:XSuperObject - iterace
« Odpověď #5 kdy: 31-07-2019, 22:36:09 »
Nakonec se podařilo tak:

Kód: Delphi [Vybrat]
  1. procedure TMyNode.JsonToItems(aObj: ISuperObject);
  2. var
  3.   i: integer;
  4.   mn: TMyNode;
  5.   a: ISuperArray;
  6.   o: ISuperObject;
  7.   e: TSuperEnumerator<IJSONPair>;
  8. begin
  9.   e := aObj.GetEnumerator;
  10.   while e.MoveNext do begin
  11.     if e.Current.DataType = dtObject then begin
  12.       mn := AddChild(e.Current.Name, jstObject);
  13.       mn.JsonToItems(e.Current.AsObject);
  14.     end else
  15.     if e.Current.DataType = dtArray then begin
  16.       a := e.Current.AsArray;
  17.       for i := 0 to a.Length -1 do begin
  18.         mn := AddChild(e.Current.Name, jstArray);
  19.         mn.JsonToItems(a.O[i]);
  20.       end;
  21.     end else begin
  22.       mn := AddChild(e.Current.Name, jstNone);
  23.       mn.FNodeName := e.Current.Name;
  24.       mn.FNodeValue := e.Current.AsVariant;
  25.     end;
  26.   end;
  27. end;
  28.  

Offline František

  • Hrdina
  • ****
  • Příspěvků: 484
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:XSuperObject - iterace
« Odpověď #6 kdy: 01-08-2019, 21:25:18 »
je to mozne pouzit aj na parsovanie XML ako podobny superobject?