我有一個從服務器的以下JSON:德爾福/超對象 - 訪問子節點離開返回NIL
{
"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);
謝謝!
你使用哪個版本的superobject,從哪個站點?我曾經使用過的版本(v.1.2)也有很多問題,有些字段無法派生。所以我切換到xsuperobject可在這裏:[鏈接](https://github.com/onryldz/x-superobject) –
@AndreRuebel,我使用1.2版本[鏈接](https://github.com/hgourvest/superobject),我將測試xsuperobject併發布結果。 – Zero
是的,這也是我用過的。它似乎在特殊條件下解析問題。這是相當一段時間,所以我不記得我遇到問題的確切條件。不幸的是,你將不得不改變你的代碼來使用xsuperobject,因爲這種方法有些不同。但從那以後它對我很有用。 –