У меня есть следующие JSON от сервера:Delphi/надобъект - Доступ к подузлам прочь возвращения 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);
Спасибо!
Какую версию суперобъекта вы используете и с какого сайта? У меня также было много проблем с версией I, когда-то использовавшейся (v.1.2), что некоторые поля не могли быть получены. Поэтому я переключился на xsuperobject, доступный здесь: [link] (https://github.com/onryldz/x-superobject) –
@AndreRuebel, я использую версию 1.2 из этой [link] (https://github.com/hgourvest/superobject), я проведу xsuperobject и отправлю результат. – Zero
Да, это тот, который я использовал. Кажется, что в особых условиях проблемы разбора. Это довольно давно, поэтому я не могу вспомнить точные условия, при которых у меня были проблемы. К сожалению, вам придется изменить свой код, чтобы использовать xsuperobject, так как подход несколько отличается. Но это работает для меня с тех пор. –