Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Akeneo: Get List of Products (using StringBuilder)

See more HTTP Misc Examples

Using a previously obtained request token, demonstrates how to get a list of products using a Chilkat StringBuilder. Using the StringBuilder is convenient because it prevents returning a potentially large string. Instead, the result is deposited into the StringBuilder object.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Http,
  Chilkat.StringBuilder,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  sbJson: TStringBuilder;
  json: TJsonObject;
  v_linksSelfHref: string;
  v_linksFirstHref: string;
  current_page: Integer;
  i: Integer;
  count_i: Integer;
  identifier: string;
  family: string;
  parent: string;
  enabled: Boolean;
  created: string;
  updated: string;
  j: Integer;
  count_j: Integer;
  strVal: string;
  locale: string;
  scope: string;
  data: Boolean;
  data_str: string;
  v_linksDownloadHref: string;
  data_int: Integer;
  dataAmount: string;
  dataUnit: string;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  http := THttp.Create;

  //  Use your previously obtained access token.
  //  See Get Akeneo Access Token
  http.AuthToken := 'access_token';

  sbJson := TStringBuilder.Create;
  success := http.QuickGetSb('http://pim.my-akeneo-site.com/api/rest/v1/products',sbJson);
  if (success <> True) then
    begin
      WriteLn(http.LastHeader);
      WriteLn(http.LastErrorText);
      Exit;
    end;

  //  A sample response looks like this.
  //  See below for sample code to parse the JSON response..

  //  {
  //    "_links": {
  //      "self": {
  //        "href": "https://demo.akeneo.com/api/rest/v1/products?page=3&limit=3"
  //      },
  //      "first": {
  //        "href": "https://demo.akeneo.com/api/rest/v1/products?page=1&limit=3"
  //      },
  //      "previous": {
  //        "href": "https://demo.akeneo.com/api/rest/v1/products?page=2&limit=3"
  //      },
  //      "next": {
  //        "href": "https://demo.akeneo.com/api/rest/v1/products?page=4&limit=3"
  //      }
  //    },
  //    "current_page": 3,
  //    "_embedded": {
  //      "_items": [
  //        {
  //          "_links": {
  //            "self": {
  //              "href": "https://demo.akeneo.com/api/rest/v1/product/top"
  //            }
  //          },
  //          "identifier": "top",
  //          "family": "tshirt",
  //          "groups": [],
  //          "parent": null,
  //          "categories": [
  //            "summer_collection"
  //          ],
  //          "enabled": true,
  //          "values": {
  //            "name": [
  //              {
  //                "data": "Top",
  //                "locale": "en_US",
  //                "scope": null
  //              },
  //              {
  //                "data": "D�bardeur",
  //                "locale": "fr_FR",
  //                "scope": null
  //              }
  //            ],
  //            "description": [
  //              {
  //                "data": "Summer top",
  //                "locale": "en_US",
  //                "scope": "ecommerce"
  //              },
  //              {
  //                "data": "Top",
  //                "locale": "en_US",
  //                "scope": "tablet"
  //              },
  //              {
  //                "data": "D�bardeur pour l'�t�",
  //                "locale": "fr_FR",
  //                "scope": "ecommerce"
  //              },
  //              {
  //                "data": "D�bardeur",
  //                "locale": "fr_FR",
  //                "scope": "tablet"
  //              }
  //            ],
  //            "price": [
  //              {
  //                "locale": null,
  //                "scope": null,
  //                "data": [
  //                  {
  //                    "amount": "15.5",
  //                    "currency": "EUR"
  //                  },
  //                  {
  //                    "amount": "15",
  //                    "currency": "USD"
  //                  }
  //                ]
  //              }
  //            ],
  //            "color": [
  //              {
  //                "locale": null,
  //                "scope": null,
  //                "data": "black"
  //              }
  //            ],
  //            "size": [
  //              {
  //                "locale": null,
  //                "scope": null,
  //                "data": "m"
  //              }
  //            ]
  //          },
  //          "created": "2016-06-23T18:24:44+02:00",
  //          "updated": "2016-06-25T17:56:12+02:00",
  //          "associations": {
  //            "PACK": {
  //              "products": [
  //                "sunglasses"
  //              ],
  //              "groups": []
  //            }
  //          }
  //        },
  //        {
  //          "_links": {
  //            "self": {
  //              "href": "https://demo.akeneo.com/api/rest/v1/product/cap"
  //            }
  //          },
  //          "identifier": "cap",
  //          "family": "caps",
  //          "groups": [],
  //          "parent": null,
  //          "categories": [
  //            "summer_collection"
  //          ],
  //          "enabled": true,
  //          "values": {
  //            "name": [
  //              {
  //                "data": "Cap",
  //                "locale": "en_US",
  //                "scope": null
  //              },
  //              {
  //                "data": "Casquette",
  //                "locale": "fr_FR",
  //                "scope": null
  //              }
  //            ],
  //            "description": [
  //              {
  //                "data": "Cap unisex",
  //                "locale": "en_US",
  //                "scope": "ecommerce"
  //              },
  //              {
  //                "data": "Cap unisex",
  //                "locale": "en_US",
  //                "scope": "tablet"
  //              },
  //              {
  //                "data": "Casquette unisexe",
  //                "locale": "fr_FR",
  //                "scope": "ecommerce"
  //              },
  //              {
  //                "data": "Casquette unisexe",
  //                "locale": "fr_FR",
  //                "scope": "tablet"
  //              }
  //            ],
  //            "price": [
  //              {
  //                "locale": null,
  //                "scope": null,
  //                "data": [
  //                  {
  //                    "amount": "20",
  //                    "currency": "EUR"
  //                  },
  //                  {
  //                    "amount": "20",
  //                    "currency": "USD"
  //                  }
  //                ]
  //              }
  //            ],
  //            "color": [
  //              {
  //                "locale": null,
  //                "scope": null,
  //                "data": "black"
  //              }
  //            ]
  //          },
  //          "created": "2016-06-23T18:24:44+02:00",
  //          "updated": "2016-06-25T17:56:12+02:00",
  //          "associations": {
  //            "PACK": {
  //              "products": [
  //                "sunglasses"
  //              ],
  //              "groups": []
  //            }
  //          }
  //        },
  //        {
  //          "_links": {
  //            "self": {
  //              "href": "https://demo.akeneo.com/api/rest/v1/product/sweat"
  //            }
  //          },
  //          "identifier": "sweat",
  //          "family": null,
  //          "groups": [],
  //          "parent": null,
  //          "categories": [
  //            "winter_collection"
  //          ],
  //          "enabled": true,
  //          "values": {},
  //          "created": "2016-06-23T11:24:44+02:00",
  //          "updated": "2016-06-23T11:24:44+02:00",
  //          "associations": {}
  //        }
  //      ]
  //    }
  //  }
  //  

  json := TJsonObject.Create;
  json.LoadSb(sbJson);

  v_linksSelfHref := json.StringOf('_links.self.href');
  v_linksFirstHref := json.StringOf('_links.first.href');
  current_page := json.IntOf('current_page');
  i := 0;
  count_i := json.SizeOfArray('_embedded.items');
  while i < count_i do
    begin
      json.I := i;
      v_linksSelfHref := json.StringOf('_embedded.items[i]._links.self.href');
      identifier := json.StringOf('_embedded.items[i].identifier');
      family := json.StringOf('_embedded.items[i].family');
      parent := json.StringOf('_embedded.items[i].parent');
      enabled := json.BoolOf('_embedded.items[i].enabled');
      created := json.StringOf('_embedded.items[i].created');
      updated := json.StringOf('_embedded.items[i].updated');
      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].groups');
      while j < count_j do
        begin
          json.J := j;
          strVal := json.StringOf('_embedded.items[i].groups[j]');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].categories');
      while j < count_j do
        begin
          json.J := j;
          strVal := json.StringOf('_embedded.items[i].categories[j]');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.blocked');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.blocked[j].locale');
          scope := json.StringOf('_embedded.items[i].values.blocked[j].scope');
          data := json.BoolOf('_embedded.items[i].values.blocked[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.can_cut');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.can_cut[j].locale');
          scope := json.StringOf('_embedded.items[i].values.can_cut[j].scope');
          data := json.BoolOf('_embedded.items[i].values.can_cut[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.not_used');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.not_used[j].locale');
          scope := json.StringOf('_embedded.items[i].values.not_used[j].scope');
          data := json.BoolOf('_embedded.items[i].values.not_used[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.deny_delivery');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.deny_delivery[j].locale');
          scope := json.StringOf('_embedded.items[i].values.deny_delivery[j].scope');
          data := json.BoolOf('_embedded.items[i].values.deny_delivery[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.can_split_package');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.can_split_package[j].locale');
          scope := json.StringOf('_embedded.items[i].values.can_split_package[j].scope');
          data := json.BoolOf('_embedded.items[i].values.can_split_package[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.transfer_to_warehouse');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.transfer_to_warehouse[j].locale');
          scope := json.StringOf('_embedded.items[i].values.transfer_to_warehouse[j].scope');
          data := json.BoolOf('_embedded.items[i].values.transfer_to_warehouse[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.product_code');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.product_code[j].locale');
          scope := json.StringOf('_embedded.items[i].values.product_code[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.product_code[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.nuotrauka');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.nuotrauka[j].locale');
          scope := json.StringOf('_embedded.items[i].values.nuotrauka[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.nuotrauka[j].data');
          v_linksDownloadHref := json.StringOf('_embedded.items[i].values.nuotrauka[j]._links.download.href');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.minimum_quantity');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.minimum_quantity[j].locale');
          scope := json.StringOf('_embedded.items[i].values.minimum_quantity[j].scope');
          data_int := json.IntOf('_embedded.items[i].values.minimum_quantity[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.code');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.code[j].locale');
          scope := json.StringOf('_embedded.items[i].values.code[j].scope');
          data_int := json.IntOf('_embedded.items[i].values.code[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.name');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.name[j].locale');
          scope := json.StringOf('_embedded.items[i].values.name[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.name[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.fsc_code');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.fsc_code[j].locale');
          scope := json.StringOf('_embedded.items[i].values.fsc_code[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.fsc_code[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.warehouse');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.warehouse[j].locale');
          scope := json.StringOf('_embedded.items[i].values.warehouse[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.warehouse[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.item_volume');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.item_volume[j].locale');
          scope := json.StringOf('_embedded.items[i].values.item_volume[j].scope');
          dataAmount := json.StringOf('_embedded.items[i].values.item_volume[j].data.amount');
          dataUnit := json.StringOf('_embedded.items[i].values.item_volume[j].data.unit');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.customs_code');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.customs_code[j].locale');
          scope := json.StringOf('_embedded.items[i].values.customs_code[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.customs_code[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.product_type');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.product_type[j].locale');
          scope := json.StringOf('_embedded.items[i].values.product_type[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.product_type[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.weight_netto');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.weight_netto[j].locale');
          scope := json.StringOf('_embedded.items[i].values.weight_netto[j].scope');
          dataAmount := json.StringOf('_embedded.items[i].values.weight_netto[j].data.amount');
          dataUnit := json.StringOf('_embedded.items[i].values.weight_netto[j].data.unit');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.supplier_code');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.supplier_code[j].locale');
          scope := json.StringOf('_embedded.items[i].values.supplier_code[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.supplier_code[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.tariff_number');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.tariff_number[j].locale');
          scope := json.StringOf('_embedded.items[i].values.tariff_number[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.tariff_number[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.weight_brutto');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.weight_brutto[j].locale');
          scope := json.StringOf('_embedded.items[i].values.weight_brutto[j].scope');
          dataAmount := json.StringOf('_embedded.items[i].values.weight_brutto[j].data.amount');
          dataUnit := json.StringOf('_embedded.items[i].values.weight_brutto[j].data.unit');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.package_code_1');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.package_code_1[j].locale');
          scope := json.StringOf('_embedded.items[i].values.package_code_1[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.package_code_1[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.package_code_2');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.package_code_2[j].locale');
          scope := json.StringOf('_embedded.items[i].values.package_code_2[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.package_code_2[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.package_code_3');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.package_code_3[j].locale');
          scope := json.StringOf('_embedded.items[i].values.package_code_3[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.package_code_3[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.supplier_number');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.supplier_number[j].locale');
          scope := json.StringOf('_embedded.items[i].values.supplier_number[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.supplier_number[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.package_volume_1');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.package_volume_1[j].locale');
          scope := json.StringOf('_embedded.items[i].values.package_volume_1[j].scope');
          dataAmount := json.StringOf('_embedded.items[i].values.package_volume_1[j].data.amount');
          dataUnit := json.StringOf('_embedded.items[i].values.package_volume_1[j].data.unit');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.package_volume_2');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.package_volume_2[j].locale');
          scope := json.StringOf('_embedded.items[i].values.package_volume_2[j].scope');
          dataAmount := json.StringOf('_embedded.items[i].values.package_volume_2[j].data.amount');
          dataUnit := json.StringOf('_embedded.items[i].values.package_volume_2[j].data.unit');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.package_volume_3');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.package_volume_3[j].locale');
          scope := json.StringOf('_embedded.items[i].values.package_volume_3[j].scope');
          dataAmount := json.StringOf('_embedded.items[i].values.package_volume_3[j].data.amount');
          dataUnit := json.StringOf('_embedded.items[i].values.package_volume_3[j].data.unit');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.package_weight_1');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.package_weight_1[j].locale');
          scope := json.StringOf('_embedded.items[i].values.package_weight_1[j].scope');
          dataAmount := json.StringOf('_embedded.items[i].values.package_weight_1[j].data.amount');
          dataUnit := json.StringOf('_embedded.items[i].values.package_weight_1[j].data.unit');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.package_weight_2');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.package_weight_2[j].locale');
          scope := json.StringOf('_embedded.items[i].values.package_weight_2[j].scope');
          dataAmount := json.StringOf('_embedded.items[i].values.package_weight_2[j].data.amount');
          dataUnit := json.StringOf('_embedded.items[i].values.package_weight_2[j].data.unit');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.package_weight_3');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.package_weight_3[j].locale');
          scope := json.StringOf('_embedded.items[i].values.package_weight_3[j].scope');
          dataAmount := json.StringOf('_embedded.items[i].values.package_weight_3[j].data.amount');
          dataUnit := json.StringOf('_embedded.items[i].values.package_weight_3[j].data.unit');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.country_of_origin');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.country_of_origin[j].locale');
          scope := json.StringOf('_embedded.items[i].values.country_of_origin[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.country_of_origin[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.product_group_code');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.product_group_code[j].locale');
          scope := json.StringOf('_embedded.items[i].values.product_group_code[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.product_group_code[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.base_measurement_unit');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.base_measurement_unit[j].locale');
          scope := json.StringOf('_embedded.items[i].values.base_measurement_unit[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.base_measurement_unit[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.measurement_unit_code');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.measurement_unit_code[j].locale');
          scope := json.StringOf('_embedded.items[i].values.measurement_unit_code[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.measurement_unit_code[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.product_category_code');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.product_category_code[j].locale');
          scope := json.StringOf('_embedded.items[i].values.product_category_code[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.product_category_code[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.sale_measurement_unit');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.sale_measurement_unit[j].locale');
          scope := json.StringOf('_embedded.items[i].values.sale_measurement_unit[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.sale_measurement_unit[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.country_of_origin_code');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.country_of_origin_code[j].locale');
          scope := json.StringOf('_embedded.items[i].values.country_of_origin_code[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.country_of_origin_code[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.vat_registration_group');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.vat_registration_group[j].locale');
          scope := json.StringOf('_embedded.items[i].values.vat_registration_group[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.vat_registration_group[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.critical_amount_of_stock');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.critical_amount_of_stock[j].locale');
          scope := json.StringOf('_embedded.items[i].values.critical_amount_of_stock[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.critical_amount_of_stock[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.stock_registration_group');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.stock_registration_group[j].locale');
          scope := json.StringOf('_embedded.items[i].values.stock_registration_group[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.stock_registration_group[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.purchase_measurement_unit');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.purchase_measurement_unit[j].locale');
          scope := json.StringOf('_embedded.items[i].values.purchase_measurement_unit[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.purchase_measurement_unit[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.product_registration_group');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.product_registration_group[j].locale');
          scope := json.StringOf('_embedded.items[i].values.product_registration_group[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.product_registration_group[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.base_measurement_unit_quantity');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.base_measurement_unit_quantity[j].locale');
          scope := json.StringOf('_embedded.items[i].values.base_measurement_unit_quantity[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.base_measurement_unit_quantity[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.comment');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.comment[j].locale');
          scope := json.StringOf('_embedded.items[i].values.comment[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.comment[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.units_in_pallet');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.units_in_pallet[j].locale');
          scope := json.StringOf('_embedded.items[i].values.units_in_pallet[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.units_in_pallet[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.first_description');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.first_description[j].locale');
          scope := json.StringOf('_embedded.items[i].values.first_description[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.first_description[j].data');
          j := j + 1;
        end;

      j := 0;
      count_j := json.SizeOfArray('_embedded.items[i].values.second_description');
      while j < count_j do
        begin
          json.J := j;
          locale := json.StringOf('_embedded.items[i].values.second_description[j].locale');
          scope := json.StringOf('_embedded.items[i].values.second_description[j].scope');
          data_str := json.StringOf('_embedded.items[i].values.second_description[j].data');
          j := j + 1;
        end;

      i := i + 1;
    end;

  WriteLn('Success.');


  http.Free;
  sbJson.Free;
  json.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.