1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Donation with Paypal!!!

    Go to your paypal account and send directly donation to [email protected]

    1 month - 10 $ - Standart VIP

    6 months - 20 $- Standart VIP

    1 year - 30 $- Standart VIP

    2 years - 50 $- Standart VIP

    Gold member for life - 150 $- Standart VIP

    High Vip (Standart VIP include) group please send PM or email to [email protected] for info

    After Donation please send email to [email protected]

  3. Donation Ways 2020


    Paysend
  4. Telegram

  5. Delphifan Magazine
Dismiss Notice

Donation with Paypal!!!

Go to your paypal account and send directly donation to [email protected]

1 month - 10 $ - Standart VIP

6 months - 20 $- Standart VIP

1 year - 30 $- Standart VIP

2 years - 50 $- Standart VIP

Gold member for life - 150 $- Standart VIP

High Vip (Standart VIP include) group please send PM or email to [email protected] for info

After Donation please send email to [email protected]

Dismiss Notice
For open hidden message no need write thanks, thank etc. Enough is click to like button on right side of thread.

How to parse nested JSON object in Delphi XE2

Discussion in 'Delphi Components,Freeware, Open Source' started by AdminDF, Apr 19, 2013.

  1. AdminDF
    Online

    AdminDFAdminDF is a Verified Member Delphifan Staff Member DF Staff

    Code:
    How to parse nested JSON object in Delphi XE2?
    {
        "products": {
            "Men's Sneakers": {
                "instock": false,
                "size": "423",
                "manufacturer": "Adidas",
                "lastcheck": "20120529"
            },
            "Purse": {
                "instock": true,
                "size": "not applicable",
                "manufacturer": "Prada",
                "lastcheck": "20120528"
            },
            "Men's Hood": {
                "instock": false,
                "size": "M",
                "manufacturer": "Generic",
                "lastcheck": "20120529"
           }
        },
       "total": 41,
       "available": 30
    }
           
    procedure TForm1.ParseString(const AString: string);
    var
      json          : TJSONObject;
      jPair         : TJSONPair;
      jValue        : TJSONValue;
      jcValue       : TJSONValue;
      l,i           : Integer;
    begin
        json    := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(AString),0) as TJSONObject;
      try
        //get the pair to evaluate in this case the index is 1
        jPair   := json.Get(1);
            {further process the nested objects and adding them to the listview}
      finally
         json.Free;
      end;
    end;
           
    {$APPTYPE CONSOLE}
     
    {$R *.res}
     
    uses
      DBXJSON,
      System.SysUtils;
     
     
    Const
    StrJson=
    '{'+
    '    "products": {'+
    '        "Men''s Sneakers": {'+
    '            "instock": false,'+
    '            "size": "423",'+
    '            "manufacturer": "Adidas",'+
    '            "lastcheck": "20120529"'+
    '        },'+
    '        "Purse": {'+
    '            "instock": true,'+
    '            "size": "not applicable",'+
    '            "manufacturer": "Prada",'+
    '            "lastcheck": "20120528"'+
    '        },'+
    '        "Men''s Hood": {'+
    '            "instock": false,'+
    '            "size": "M",'+
    '            "manufacturer": "Generic",'+
    '            "lastcheck": "20120529"'+
    '        }'+
    '    },'+
    '    "total": 41,'+
    '    "available": 30'+
    '}';
     
    procedure ParseJson;
    var
      LJsonObj  : TJSONObject;
      LJPair    : TJSONPair;
      LProducts : TJSONValue;
      LProduct  : TJSONValue;
      LItem     : TJSONValue;
      LIndex    : Integer;
      LSize     : Integer;
    begin
        LJsonObj    := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StrJson),0) as TJSONObject;
      try
         LProducts:=LJsonObj.Get('products').JsonValue;
         LSize:=TJSONArray(LProducts).Size;
         for LIndex:=0 to LSize-1 do
         begin
          LProduct := TJSONArray(LProducts).Get(LIndex);
          LJPair   := TJSONPair(LProduct);
          Writeln(Format('Product Name %s',[LJPair.JsonString.Value]));
            for LItem in TJSONArray(LJPair.JsonValue) do
            begin
               if TJSONPair(LItem).JsonValue is TJSONFalse then
                Writeln(Format('  %s : %s',[TJSONPair(LItem).JsonString.Value, 'false']))
               else
               if TJSONPair(LItem).JsonValue is TJSONTrue then
                Writeln(Format('  %s : %s',[TJSONPair(LItem).JsonString.Value, 'true']))
               else
                Writeln(Format('  %s : %s',[TJSONPair(LItem).JsonString.Value, TJSONPair(LItem).JsonValue.Value]));
            end;
         end;
      finally
         LJsonObj.Free;
      end;
    end;
     
    begin
      try
        ParseJson;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
      Readln;
    end.
           
    Product Name Men's Sneakers
      instock : false
      size : 423
      manufacturer : Adidas
      lastcheck : 20120529
    Product Name Purse
      instock : true
      size : not applicable
      manufacturer : Prada
      lastcheck : 20120528
    Product Name Men's Hood
      instock : false
      size : M
      manufacturer : Generic
      lastcheck : 20120529
           
    products   := jPair.Get('products');
    purse      := products.GetJsonValue().Get('Purse');
    purseManuf := purse.GetJsonValue().Get('manufacturer');
    ...
           
    products   := jPair.Get('products');
    for prodPair in products.GetEnumerator() do
    begin
        prodName := prodPair.GetJsonString();
        prodObj  := prodPair.GetJsonValue();
        ...
     
  2. Netmod
    Offline

    Netmod DF Expert DF Payment Group

    thank you
     

Share This Page