Delphi / SuperObject - 访问子节点返回 NIL
Delphi / SuperObject - Accessing subnodes away returning NIL
我有来自服务器的以下 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
那样访问 "easy" 值,这是第一个元素,使用 orderObj['OrderId'];
它 returns nil
并且 orderObj
...
的所有节点都会发生同样的情况
因此,无法访问 orderObj.AsString
中的值以将其转换为变量...
有办法访问OrderItem
的内部值吗?我的 objective 使用以下代码将 OrderItem
的值转换为 ClientDataSet:
orderArray := orderObj.AsArray;
TJSONDB.JsonToClientDataSet(orderArray, cdsOrdersItems);
谢谢!
这里你提到这个:
By the logic, the values inner of OrderItem can be access like this: orderObj['OrderItems.OrderItem'];
这确实可行。
但是在你写完与最后一句话相矛盾的内容之后:
but if I try to access a "easy" value like OrderId, that is the first element, using orderObj['OrderId'];
按照您所说的逻辑,要访问您可以执行的值:
orderObj['OrderItems.OrderItem.OrderId'];
而不是直接orderObj['OrderId'];
。
我有来自服务器的以下 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
那样访问 "easy" 值,这是第一个元素,使用 orderObj['OrderId'];
它 returns nil
并且 orderObj
...
因此,无法访问 orderObj.AsString
中的值以将其转换为变量...
有办法访问OrderItem
的内部值吗?我的 objective 使用以下代码将 OrderItem
的值转换为 ClientDataSet:
orderArray := orderObj.AsArray;
TJSONDB.JsonToClientDataSet(orderArray, cdsOrdersItems);
谢谢!
这里你提到这个:
By the logic, the values inner of OrderItem can be access like this: orderObj['OrderItems.OrderItem'];
这确实可行。
但是在你写完与最后一句话相矛盾的内容之后:
but if I try to access a "easy" value like OrderId, that is the first element, using orderObj['OrderId'];
按照您所说的逻辑,要访问您可以执行的值:
orderObj['OrderItems.OrderItem.OrderId'];
而不是直接orderObj['OrderId'];
。