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'];,但是如果我尝试访问一个“简单”的值,例如OrderId,那是第一个元素,使用orderObj['OrderId'];它会返回,并且...nil的所有节点都会发生同样的情况orderObj

因此,orderObj.AsString无法访问中的值以转换为变量...

有一种方法可以访问OrderItem? OrderItem我的目标是使用以下代码将 的值转换为 ClientDataSet:

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

谢谢!

4

1 回答 1

0

你在这里提到这一点:

按逻辑,OrderItem 内部的值可以这样访问: orderObj['OrderItems.OrderItem'];

这确实可行。
但就在你写下这与最后一句话相矛盾之后:

但是如果我尝试使用 orderObj['OrderId']; 访问像 OrderId 这样的“简单”值,那就是第一个元素;

正如您所说,按照逻辑来访问您可以执行的值:

orderObj['OrderItems.OrderItem.OrderId'];

而不是orderObj['OrderId'];直接。

于 2017-07-17T18:48:16.070 回答