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

{"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
масив json
    #39822501
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVP,

самое простое, наверное, TStringList с разделителем ":"
...
Рейтинг: 0 / 0
масив json
    #39822547
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
масив json
    #39823144
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что заставляет людей так составлять json-массивы? :(
Еще чуднее пример:
{1:{...}, 2;{...}, 5:{...}, 10:{...} }
Парсите наздоровье!
...
Рейтинг: 0 / 0
масив json
    #39823155
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVP,

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

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

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

в 10-ке десериализатор есть, ищи в папке REST, по слову reflect
сериализация хороша, когда структура данных в json жестко зафиксирована. Удаление хотя бы одного поля в структуре сломает парсинг (например в новой версии структуру изменили и новая версия приложения ее поддерживает, а вот предыдущие версии перестают работать), поэтому ручками парсить надежнее вот с новой версией структуру поменяли а у тебя всё работает ибо ручками написал :-)
ога, как же ..., в реале у тебя куча гумнокода который непонятно как и где исправлять
валидацию ожидание-реальность просто нужно делать хотя бы в дебуге
...
Рейтинг: 0 / 0
масив json
    #39823312
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
масив json
    #39823386
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Там из Indy болше ничего нет.
...
Рейтинг: 0 / 0
масив json
    #39823732
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
25 сообщений из 58, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / масив json
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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