Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / масив json / 25 сообщений из 58, страница 1 из 3
04.06.2019, 19:27
    #39822491
VladimirVVP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
мне нужно из этого ответа

{"success":"1","days":"3","products":[
{"1":{"id":"1","login":"33","password":"432","firstName":"23423","lastName":"234324","id_user":"1"},
"2":{"id":"2","login":"2222","password":"2333","firstName":"3333","lastName":"34234","id_user":"1"}}]}

получить firstName и lastName

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
    procedure DUAll;
var
JSONObject, JSONObjProp: TJSONObject;
JSONString: TJSONString;
JsonArray, JsonArrayCoord: TJSONArray;
i:integer;
begin
 try
 if http.Status() = 200 then
        begin
          frmAdmin.Memo1.Text:=http.responsetext;
          JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(http.responsetext));
        if JSONObject <> nil then begin
            JSONString:=TJSONString(JSONObject.GetPairByName('success').JsonValue);
            if Pos('not session', JSONString.Value) > 0  then begin
            timerAu.Enabled:=False;
            frmAdmin.bAutorization.Caption:='Ошибка авторизации'; end else
            if Pos('1', JSONString.Value) > 0  then begin
                JSONString:=TJSONString(JSONObject.GetPairByName('days').JsonValue);
                frmAdmin.bDays.Caption:='Осталось '+JSONString.Value+' дней';
                JsonArray:=TJSONArray(JSONObject.GetPairByName('products').JsonValue);
                for i := 0 to JsonArray.Size-1  do begin
                    //  и тут я повис )))
                end;
                timerAu.Enabled:=False;
            end;
           end;
         end;
    except
      //frmAdmin.bAutorization.Caption:='соединение...';
    end;

end;
...
Рейтинг: 0 / 0
04.06.2019, 19:35
    #39822501
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
VladimirVVP,

самое простое, наверное, TStringList с разделителем ":"
...
Рейтинг: 0 / 0
04.06.2019, 21:41
    #39822547
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
VladimirVVP,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
procedure Parse(AText: string; out ADays: Integer);
var
  I: Integer;
  LJson: TJSONObject;
  LProductsNode: TJSONValue;
  LItemNode: TJSONValue;
  LDataNode: TJSONValue;
begin
  ADays := -1;
  LJson := TJSONObject.ParseJSONValue(AText) as TJSONObject;
  if Assigned(LJson) then
  begin
    try
      if LJson.Count > 0 then
      begin
        if TJSONString(LJson.Values['success']).Value = '1' then
        begin
          ADays := StrToInt(TJSONString(LJson.Values['days']).Value);
          LProductsNode := LJson.Values['products'];
          if Assigned(LProductsNode) then
          begin
            with TJSONArray(LProductsNode) do
            begin
              if Count > 0 then
                for I := 0 to Count - 1 do
                begin
                  LItemNode := Items[I];
                  if Assigned(LItemNode) then
                  begin
                    with TJSONObject(LItemNode) do
                    begin
                      LDataNode := Values[IntToStr(I + 1)];
                      if Assigned(LDataNode) then
                      begin
                        with TJSONObject(LDataNode) do
                        begin
                          // данные i-го элемента, получаемые в цикле:
                          // firstName := TJSONString(Values['firstName']).Value;
                          // lastName:= TJSONString(Values['lastName']).Value;
                        end;
                      end;
                    end;
                  end;
                end;
            end;
          end;
        end;
      end;
    finally
      LJson.DisposeOf;
    end;
  end;
end;
...
Рейтинг: 0 / 0
05.06.2019, 23:48
    #39823144
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
И что заставляет людей так составлять json-массивы? :(
Еще чуднее пример:
{1:{...}, 2;{...}, 5:{...}, 10:{...} }
Парсите наздоровье!
...
Рейтинг: 0 / 0
06.06.2019, 00:19
    #39823155
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
VladimirVVP,

в 10-ке десериализатор есть, ищи в папке REST, по слову reflect
...
Рейтинг: 0 / 0
06.06.2019, 06:44
    #39823186
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
DmSerЕще чуднее пример:
{1:{...}, 2;{...}, 5:{...}, 10:{...} }
Парсите наздоровье!
чем он чуднее? тем что невалиден?
...
Рейтинг: 0 / 0
06.06.2019, 09:40
    #39823248
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
kealon(Ruslan)VladimirVVP,

в 10-ке десериализатор есть, ищи в папке REST, по слову reflect
сериализация хороша, когда структура данных в json жестко зафиксирована. Удаление хотя бы одного поля в структуре сломает парсинг (например в новой версии структуру изменили и новая версия приложения ее поддерживает, а вот предыдущие версии перестают работать), поэтому ручками парсить надежнее

Дегтярев ЕвгенийDmSerЕще чуднее пример:
{1:{...}, 2;{...}, 5:{...}, 10:{...} }
Парсите наздоровье!
чем он чуднее? тем что невалиден?
лично я бы предпочел, чтобы массив хранился в виде "products":[{"index":"1",..},{"index":"2",..},{"index":"10",..}]
...
Рейтинг: 0 / 0
06.06.2019, 10:46
    #39823295
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
asutp2kealon(Ruslan)VladimirVVP,

в 10-ке десериализатор есть, ищи в папке REST, по слову reflect
сериализация хороша, когда структура данных в json жестко зафиксирована. Удаление хотя бы одного поля в структуре сломает парсинг (например в новой версии структуру изменили и новая версия приложения ее поддерживает, а вот предыдущие версии перестают работать), поэтому ручками парсить надежнее вот с новой версией структуру поменяли а у тебя всё работает ибо ручками написал :-)
ога, как же ..., в реале у тебя куча гумнокода который непонятно как и где исправлять
валидацию ожидание-реальность просто нужно делать хотя бы в дебуге
...
Рейтинг: 0 / 0
06.06.2019, 11:21
    #39823312
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
VladimirVVP,

какая-то у тебя глупая структура:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
{
 "success": "1",
 "days": "3",
 "products": [
  {
   "2": {
    "firstName": "3333",
    "login": "2222",
    "id_user": "1",
    "lastName": "34234",
    "id": "2",
    "password": "2333"
   },
   "1": {
    "firstName": "23423",
    "login": "33",
    "id_user": "1",
    "lastName": "234324",
    "id": "1",
    "password": "432"
   }
  }]
}


"products" - это массив с одним анонимным "{}" объектом, в котором - два объекта, странным образом именованные "2" и "1".

Ну да ладно.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
const
  cSrc = ''
    + '{'
    + ' "success": "1",'
    + ' "days": "3",'
    + ' "products": ['
    + '  {'
    + '   "2": {'
    + '    "firstName": "3333",'
    + '    "login": "2222",'
    + '    "id_user": "1",'
    + '    "lastName": "34234",'
    + '    "id": "2",'
    + '    "password": "2333"'
    + '   },'
    + '   "1": {'
    + '    "firstName": "23423",'
    + '    "login": "33",'
    + '    "id_user": "1",'
    + '    "lastName": "234324",'
    + '    "id": "1",'
    + '    "password": "432"'
    + '   }'
    + '  }]'
    + '}'
  ;

var
  fSO: ISuperObject;
  fItem: ISuperObject;
  fIter: TSuperObjectIter;
  i: Integer;
  fSL: TStringList;

begin
  fSO := SO(cSrc);
  fSO := fSO.A['products'][0];
  fSL := TStringList.Create;
  try
    if ObjectFindFirst(fSO, fIter) then begin
      repeat
        fItem := fIter.val;
        fSL.Add(Format('"%s" firstName="%s" lastName="%s"',
                [fIter.key, fItem.S['firstName'], fItem.S['lastName']]))
      until not ObjectFindNext(fIter);
    end;
    ObjectFindClose(fIter);
    ShowMessage(fSL.Text);
  finally
    fSL.Free
  end;
end;


Ах, да.
Код: pascal
1.
2.
uses
  superobject;
...
Рейтинг: 0 / 0
06.06.2019, 12:46
    #39823386
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
kealon(Ruslan),

когда парсинг пишешь ручками, можно делать какие угодно динамические проверки и динамическую обработку на поля/значения/ и т.д., парсинг отработает. При сериализации это мягко говоря недоступно :-) и это опыт именно реального использования
...
Рейтинг: 0 / 0
06.06.2019, 12:58
    #39823399
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
ёёёёё,

исходники SuperObject последний раз обновлялись 3 года назад, X-SuperObject 2 года назад. Будут ли они обновляться дальше для совместимости с новыми версиями делфи? Вопрос открытый.
Соответственно большие риски при их использовании, при этом стандартный из коробки system.json будет работать всегда, включая поддержку android и ios
...
Рейтинг: 0 / 0
06.06.2019, 13:23
    #39823416
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
asutp2,

нормально там всё с ним, от версий код зависит минимально. я вот даже на fpc утащил:

FPC/Delphi Superobject
...
Рейтинг: 0 / 0
06.06.2019, 13:28
    #39823424
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
makhaonasutp2,

нормально там всё с ним, от версий код зависит минимально. я вот даже на fpc утащил:

FPC/Delphi Superobject
Фсё плохо. Тесты последний раз обновлялись 10 лет назад...
...
Рейтинг: 0 / 0
06.06.2019, 14:03
    #39823454
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
ёёёёёТесты последний раз обновлялись 10 лет назад... Это хороший знак, не? ;)

Хотя мне больше x-superobject нравится.
...
Рейтинг: 0 / 0
06.06.2019, 14:10
    #39823459
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
rgreatёёёёёТесты последний раз обновлялись 10 лет назад... Это хороший знак, не? ;)

Хотя мне больше x-superobject нравится.
Мне тоже. Но я довольно часто использую старые дельфи.
...
Рейтинг: 0 / 0
06.06.2019, 15:38
    #39823547
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
rgreatёёёёёТесты последний раз обновлялись 10 лет назад... Это хороший знак, не? ;)
это плохой знак. говорит либо о том, что либо тесты не обновляются из за отсутствия развития основной библиотеки, либо библиотека развивается, но актуальными тестами не покрываются. Что на порядок хуже первого случая.
...
Рейтинг: 0 / 0
06.06.2019, 17:22
    #39823625
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
asutp2kealon(Ruslan),

когда парсинг пишешь ручками, можно делать какие угодно динамические проверки и динамическую обработку на поля/значения/ и т.д., парсинг отработает. При сериализации это мягко говоря недоступно :-) и это опыт именно реального использования
назад сериализовать и сравнить два json-а пипец RocketScience
...
Рейтинг: 0 / 0
06.06.2019, 18:07
    #39823661
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
asutp2,

а что там можно развивать?
Разве json стандарт развивается?
Ошибки выгребли - что еще нужно?
...
Рейтинг: 0 / 0
06.06.2019, 18:32
    #39823678
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
ёёёёё,

навскидку - в X-SuperObject почему то используется Indy, что сразу несет проблемы при использовании на android 6+. Автору либы как минимум нужно перейти на модули из коробки.
Для тех, кто пишет на древних делфи, может и пойдет, а вот на Rio всё это легаси в топку.
...
Рейтинг: 0 / 0
06.06.2019, 18:54
    #39823691
shonli95
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
...
Рейтинг: 0 / 0
06.06.2019, 19:54
    #39823708
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
VladimirVVPполучить firstName и lastName
Первую попавшуюся пару, или имя из первого элемента массива и имя из последнего элемента массива, или ... ?
...
Рейтинг: 0 / 0
06.06.2019, 20:19
    #39823721
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
Дегтярев ЕвгенийDmSerЕще чуднее пример:
{1:{...}, 2;{...}, 5:{...}, 10:{...} }
Парсите наздоровье!
чем он чуднее? тем что невалиден?

Я сразу не увидел отформатированный json от ТС, теперь вижу, что у него чуднее :)
...
Рейтинг: 0 / 0
06.06.2019, 20:28
    #39823723
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
asutp2ёёёёё,

навскидку - в X-SuperObject почему то используется Indy, что сразу несет проблемы при использовании на android 6+. Автору либы как минимум нужно перейти на модули из коробки.
Для тех, кто пишет на древних делфи, может и пойдет, а вот на Rio всё это легаси в топку.

Люто.
...
Рейтинг: 0 / 0
06.06.2019, 20:39
    #39823729
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
asutp2навскидку - в X-SuperObject почему то используется Indy, что сразу несет проблемы при использовании на android 6+.В плане "проблемы"?

TIdBytes или Base64 от TIdEncoderMIME на анроиде внезапно перестанут работать?

Там из Indy болше ничего нет.
...
Рейтинг: 0 / 0
06.06.2019, 20:44
    #39823732
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
масив json
rgreatasutp2навскидку - в X-SuperObject почему то используется Indy, что сразу несет проблемы при использовании на android 6+.В плане "проблемы"?

TIdBytes или Base64 от TIdEncoderMIME на анроиде внезапно перестанут работать?

Там из Indy болше ничего нет.

Да о чем тут спорить, просто сравнить объемы говнокода 21901959 и

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
const
  cSrc = ''
    + '{'
    + ' "success": "1",'
    + ' "days": "3",'
    + ' "products": ['
    + '  {'
    + '   "2": {'
    + '    "firstName": "3333",'
    + '    "login": "2222",'
    + '    "id_user": "1",'
    + '    "lastName": "34234",'
    + '    "id": "2",'
    + '    "password": "2333"'
    + '   },'
    + '   "1": {'
    + '    "firstName": "23423",'
    + '    "login": "33",'
    + '    "id_user": "1",'
    + '    "lastName": "234324",'
    + '    "id": "1",'
    + '    "password": "432"'
    + '   }'
    + '  }]'
    + '}'
    ;

var
  fSO: ISuperObject;
  fIter: TSuperObjectIter;
begin
  fSO := SO(cSrc).A['products'][0];
  if ObjectFindFirst(fSO, fIter) then begin
    repeat
      ShowMessageFmt('"%s" firstName="%s" lastName="%s"',
        [fIter.key, fIter.val.S['firstName'], fIter.val.S['lastName']])
    until not ObjectFindNext(fIter);
  end;
end;


...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / масив json / 25 сообщений из 58, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]