2016-05-10 2 views
0

を返す離れサブノードへのアクセス:、デルファイ/ SuperObject - 私は、サーバーから、次のJSONを持つNIL

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; 

このコードで:

{ 
    "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", 
... 

私は、この値にアクセスするには、次のコードを使用していますの値は内部ロジックによって

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

、:私はシンプルLabel1.Caption := orderObj.AsString;を使用している場合、それは私にこれを示しますは、このようなアクセスすることができます:それはnilを返し、同じことがorderObjのすべてのノードで発生orderObj['OrderItems.OrderItem'];、私はOrderIdように「簡単」の値にアクセスしようとすると、それはorderObj['OrderId'];を使用して、最初の要素である...

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

OrderItemの値にアクセスする方法はありますか?

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

ありがとう:私の目標は、次のコードを使用してClientDataSetのにOrderItemの値を変換です!あなたはこの言及ここ

+0

使用するスーパーオブジェクトのバージョンはどのサイトですか?私は一度使用したバージョン(v.1.2)でいくつかのフィールドを導き出すことができないという点で多くの問題を抱えていました。そこで、私はxsuperobjectに切り替えました:[link](https://github.com/onryldz/x-superobject) –

+0

@AndreRuebel、私はこの[link](https://github.com)からバージョン1.2を使用しています/ hgourvest/superobject)、私はxsuperobjectをテストし、結果を投稿します。 – Zero

+0

はい、これも私が使用したものです。それは特別な条件の下で解析の問題があるようです。それはかなり前のことなので、問題があった正確な条件を思い出すことはできません。残念ながら、xsuperobjectを使用するようにコードを変更する必要があります。これは、アプローチが多少異なるためです。しかしそれはそれ以来私のために働く。 –

答えて

0

:ロジックによって

を、OrderItemの内部値は、このようなアクセスすることができます:orderObj [ 'OrderItems.OrderItem'];

これは実際には機能します。
しかし、あなたは、この矛盾最後の文を書いた直後:

が、私はOrderIdでのような「簡単」の値にアクセスしようとした場合、それはorderObj [「OrderIdで」]を使用して、最初の要素です。ロジックによって

、あなたは何ができるの値にアクセスするために、言うように:直接

orderObj['OrderItems.OrderItem.OrderId']; 

なくorderObj['OrderId'];を。

+0

ええ、そうです、この場合、私はこのようにする必要があります: 'orderObj ['OrderItems.OrderItem [0] .OrderId'];'。この回答では私はただ一つのアイテムしか持っていませんが、もっと... – Zero

関連する問題