1

サーバーから次の JSON があります。

{
  "SuccessResponse": {
    "Head": {
      "RequestId": "",
      "RequestAction": "GetMultipleOrderItems",
      "ResponseType": "Orders",
      "Timestamp": "2016-05-10T15:13:06-0300"
    },
    "Body": {
      "Orders": {
        "Order": [
          {
            "OrderId": "457634",
            "OrderNumber": "256176682",
            "OrderItems": {
              "OrderItem": {
                "OrderItemId": "712893",
                "ShopId": "14690930",
                "OrderId": "457634",
...

この値にアクセスするには、次のコードを使用しています。

procedure TForm1.GetOrdersPendingItems;
var
  mydata : string;
  obj, orderObj: ISuperObject;
  orderArray: TSuperArray;
begin
  mydata := GetURLAsString(GenerateApiUrl('GetMultipleOrderItems', 'OrderIdList', '[457634,457817]'));
  obj := SO(mydata);

  orderObj := obj['SuccessResponse.Body.Orders.Order'];
end;

このコードで単純な を使用するとLabel1.Caption := orderObj.AsString;、次のように表示されます。

"OrderId": "457634",
"OrderNumber": "256176682",
"OrderItems": {
   "OrderItem": {
       "OrderItemId": "712893",
       "ShopId": "14690930",
       "OrderId": "457634",
...

ロジックにより、 の内部の値は次のOrderItemようにアクセスできます: 、しかし、最初の要素である のorderObj['OrderItems.OrderItem'];ような「簡単な」値にアクセスしようとすると、それを使用して返され、 ...のすべてのノードで同じことが起こります。OrderIdorderObj['OrderId'];nilorderObj

したがって、の値にorderObj.AsStringアクセスして変数に変換することはできません...

OrderItem?の内部の値にアクセスする方法があります。私の目的はOrderItem、次のコードを使用しての値を ClientDataSet に変換することです。

orderArray := orderObj.AsArray;
TJSONDB.JsonToClientDataSet(orderArray, cdsOrdersItems);

ありがとう!

4

1 に答える 1