Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77

Как распарсить JSON?

31.05.2016, 19:47. Показов 5408. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет,я в тупике((((
Имеем код Delphi 10
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Var
  S: String;
  I: Integer;
  SL: TStringList;
begin
SL:=TStringList.Create;
s:=memo1.Lines.Text;
 SL.Text := S;
    for I := 0 to SL.Count - 1 do
      if Pos('"O1"', SL[i]) > 0 then
      begin
        S := SL[I];
        S := Copy(S, Pos('"O1"', S) + 6, 100);
        S := Copy(S, 1, Pos('","O1E"', S) - 1);
        memo2.Lines.add(s);
end;
end;
имеем текст
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
стрия","O1E":"Austria","O1I":11809,"O2":"Мальта","O2E":"Malta","O2I":12607,"S":1464719400,"SE":"Football","SI":1,"SN":"Футбол"
,"T":50,"B":7747,"CI":4776799},{"E":[{"C":1.76,"G":1,"T":1},{"C":3.54,"G":1,"T":2},{"C":5.9,"G":1,"T":3},{"C":2.365,"G":2,"P":
-1,"T":7},{"C":1.66,"G":2,"P":1,"T":8},{"C":1.4,"G":17,"P":1.5,"T":9},{"C":2.86,"G":17,"P":1.5,"T":10},{"C":1.72,"G":17,"P":2
C":1.65,"G":19,"T":181},{"C":2.168,"G":8,"T":6},{"C":1.344,"G":8,"T":5},{"C":1.168,"G":8,"T":4}],"EC":740,"HS":1,"I":78129035
,"L":"Товарищеские матчи","LE":"Friendlies","LI":212413,"N":188,"O1":"Ирландия","O1E":"Republic of Ireland","O1I":12643,"O2
":"Беларусь","O2E":"Belarus","O2I":12733,"S":1464720300,"SE":"Football","SI":1,"SN":"Футбол","T":50,"B":8647,"CI":
C":1.36,"G":8,"T":5},{"C":1.57,"G":8,"T":6},{"C":1.71,"G":2,"T":7},{"C":2.19,"G":2,"T":8},{"C":1.57,"G":17,"P":2,"T":
9},{"C":2.33,"G":17,"P":2,"T":10},{"C":2.14,"G":17,"P":2.5,"T":9},{"C":1.77,"G":17,"P":2.5,"T":10},{"C":3.1,"G":17,"P":
3,"T":9},{"C":1.38,"G":17,"P":3,"T":10},{"C":1.68,"G":19,"T":180},{"C":2,"G":19,"T":181}],"EC":533,"HS":1,"I":78203849,
"L":"Чемпионат Италии. Серия B","LE":"Italy. Serie B","LI":7067,"N":3010,"O1":"Трапани","O1E":"Trapani Calcio","O1I":2538
1,"O2":"Специа","O2E":"Spezia Calcio","O2I":3602,"S":1464719400,"SE":"Football","SI":1,"SN":"Футбол","T":1,"B":7747,"CI":479
9023},{"E":[{"C":2.26,"G":1,"T":1},{"C":3.98,"G":1,"T":2},{"C":2.41,"G":1,"T":3},{"C":1.53,"G":8,"T":4},{"C":1.57,"G":8,"T":6},
{"C":1.22,"G":8,"T":5},{"C":1.555,"G":17,"P":2.5,"T":9},{"C":2.38,"G":17,"P":2.5,"T":10},{"C":1.95,"G":17,"P":3,"T":9}
,{"C":1.85,"G":17,"P":3,"T":10},{"C":1.8,"G":2,"T":7},{"C":1.91,"G":2,"T":8},{"C":1.55,"G":17,"P":3.5,"T":10},
{"C":2.3,"G":17,"P":3.5,"T":9},{"C":3.3,"G":2,"P":-1,"T":7},{"C":1.29,"G":2,"P":1,"T":8},{"C":1.445,"G":19,"T":180},{
"C":2.595,"G":19,"T":181}],"EC":120,"HS":1,"I":78289791,"L":"Ирландия. Лейнстер Лига","LE":"Republic of Ireland. Leinster League",
"LI":983817,"N":1883,"O1":"Блюбелл Юнайтед","O1E":"Bluebell United","O1I":28009,"O2":"Крамлин Юнайтед","O2E":"Crumlin United"
"O2I":164685,"S":1464717600,"SE":"Football","SI":1,"SN":"Футбол","B":5947,"CI":4805511},{"E":[{"C":1.685,"G":1,"T":1},{"C":4.34,"G
":1,"T":2},{"C":3.46,"G":1,"T":3},{"C":1.288,"G":8,"T":4},{"C":2.1,"G":8,"T":6},{"C":1.2,"G":8,"T":5},{"C":1.33,"G":17,"P":2.5,"T"
:9},{"C":3.4,"G":17,"P":2.5,"T":10},{"C":1.85,"G":17,"P":3.5,"T":9},{"C":1.95,"G":17,"P":3.5,"T":10},{"C":1.4,"G":2,"T":7}
не хочет получать команды...
получает одну команду и всё...
иногда вообще не получает,что не так?
Помогите пожалуйста,спасибо за ответы.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2016, 19:47
Ответы с готовыми решениями:

Как распарсить элементы массива в JSON документе?
Помогите роспарсить JSON документ. С строчными параметрами разобрался, а вот достать массив у меня пока не получается. Есть JSON: ...

Распарсить JSON (System.JSON)
{ "response": { "count": 3, "items": } } Доброго времени суток! Помогите, не пойму как получить обьекты...

Распарсить JSON
Доброго времени суток! Помогите распарсить JSON: 1: { "access_token": "34543645tgreg45yy455y3435yh35hy3", ...

56
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
01.06.2016, 17:01  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от krapotkin Посмотреть сообщение
я только пять минут тупил, прежде чем понял что там не ноль один а "О" один
ахах
точно,а я всегда 01 писал xD
ахахахахах,боже,как же стыдно то(((

Добавлено через 1 час 28 минут
Цитата Сообщение от krapotkin Посмотреть сообщение
я только пять минут тупил, прежде чем понял что там не ноль один а "О" один
так,получил все что надо,кроме одного...
я заметил если слово находиться в кавычках,то все работает нормально.
но если попробовать вытащить цифры,то выбивает ошибку
Delphi
1
invalid class typecast
как избежать этого?

Добавлено через 7 минут
Delphi
1
"I":78342865,"LI":1032463,"N":6234,
находятся в одном месте с командами...
но выбивает invalid class typecast
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
01.06.2016, 17:09
А какой там тип? Может там как раз число? IntToStr?
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
01.06.2016, 17:58  [ТС]
Цитата Сообщение от BOGG ART Посмотреть сообщение
А какой там тип? Может там как раз число? IntToStr?
там цифры...если допустим цифры будут в кавычках,то программа нормально спарсит
но без ковычек не хочет парсить...пробовал я и inttostr и strtoint не хочет...
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
01.06.2016, 18:01
Delphi
1
2
3
4
5
6
7
8
9
10
X:ISuperObject;
s:string;
i:integer;
o:ISuperObject;
arr:ISuperArray;
 
s:=x.S['key'];
i:=x.I['key'];
o:=x.O['key'];
arr:=x.A['key'];
идея понятна?
1
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
01.06.2016, 20:36  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
X:ISuperObject;
s:string;
i:integer;
o:ISuperObject;
arr:ISuperArray;
 
s:=x.S['key'];
i:=x.I['key'];
o:=x.O['key'];
arr:=x.A['key'];
идея понятна?
не особо...
помогите мне пожалуйста,я себе гавно программу делаю...
мне нужно ее доделать(((

Добавлено через 1 час 20 минут
Цитата Сообщение от krapotkin Посмотреть сообщение
идея понятна?
помогите пожалуйста,я знаю что мне учить надо язык...но мне сейчас очень нужно доделать программу....
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
01.06.2016, 20:45
вот откуда мне знать, что нужно?
кроме "доделать программу"
была единственная просьба - достать команды - так я достал
если надо число доставать, вместо Item.S['...'] используем Item.I['...']
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
01.06.2016, 20:58  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
если надо число доставать, вместо Item.S['...'] используем Item.I['...']
да уже разобрался,опять с нулями тупанул....
простите меня...
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
02.06.2016, 12:29  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
...['...']
здравствуйте,а скажите пожалуйста,как заходить в двойной или тройной ключ?
Допустим имеем
Value>0>Е>тут то что нужно мне
картинка пример.
и еще вопрос,как допустим найти именно нужное значение,допустим O1E:"Republic of Macedonia"
спасибо)))
Миниатюры
Как распарсить JSON?  
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
02.06.2016, 12:46
E - это массив // x.A['E']
из скольки-то объектов доступ к I-му объекту получится
x.A['E'].O[i]
чтобы программа каждый раз в цикле не искала заново массив, я , как и в первый раз, рекомендую использовать временную переменную
Delphi
1
2
3
4
5
6
arr2:=x.A['E'];
for j:=0 to arr2.length-1 do
begin
  item2:=arr2.O[j];
  C_Value := item2.F['C']; // 3.185
end
чтобы найти что-то
вроде как очевидно
Delphi
1
if (item.S['O1E'] = 'Republic of Macedonia') then
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
02.06.2016, 17:51  [ТС]
не понимаю...
Delphi
1
2
3
4
5
arr:=x.A['Value'].O[i].A['E'];
  for i := 0 to Arr.Length-1 do
  begin
    item:=arr.O[i];
    Listbox1.Items.Add(FloatToStr(item.F['P'])+' 'FloatToStr(item.F['C']));
получает не со всех массивов...
штук 10 получает...
а должен 50...

Добавлено через 2 часа 43 минуты
Цитата Сообщение от krapotkin Посмотреть сообщение
E - это массив // x.A['E']
из скольки-то объектов доступ к I-му объекту получится
x.A['E'].O[i]
что я делаю не так((( как получить ко всем объектам доступ???((((
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
  x,item:ISuperObject;
  arr:ISuperArray;
  i: Integer;
  ss:TStringStream;
begin
  listbox1.Clear;
  data.Caption:='Всего матчей на '+DateTostr(Date)+' > 0 матчей.';
  ss:=TStringStream.Create('');
  ss.LoadFromFile(ExtractFilePath(ParamStr(0))+'111.txt');
  x:=TSuperObject.Create(ss.DataString);
  ss.Free;
 
  arr:= x.A['Value'].O[i].A['E'];
  for i := 0 to Arr.Length-1 do
  begin
    item:=arr.O[i];
    Listbox1.Items.Add(FloatToStr(item.F['P'])+' '+FloatToStr(item.F['C']));
    Listbox1.ItemIndex:=-0;;
  end;
end;
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
02.06.2016, 20:26
а чему в 14-й строке равно i ?
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
02.06.2016, 21:05  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
а чему в 14-й строке равно i ?
да там пусто...
я думаю должно быть
Delphi
1
for i := 0 to i.count-1 do
но он все равно получает 10 а не 50...
он в i запоминает 0...
почему не понимаю...

Добавлено через 5 минут
там идет массив Value (в котором от 0 до 49 объектов) потом массив E от 0 до 20...
у меня щас в косяк в том что он заходит в первый объект...его парсит и всё...
я понимаю логически что косяк в
Delphi
1
i
но как исправить не понимаю....

Добавлено через 9 минут
должно быть так
value>0>E>спарсил что мне надо
value>1>E>спарсил что мне надо
value>2>E>спарсил что мне надо
value>3>E>спарсил что мне надо
value>4>E>спарсил что мне надо
value>5>E>спарсил что мне надо
а он заходит только value>0>E парсит то что мне нужно и всё...
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
02.06.2016, 21:08
i.count не бывает. i - это integer

я не понимаю что нужно получить?
у нас есть массив Value в нем объекты Item получаем в цикле
Delphi
1
2
3
4
5
6
arr:=x.A['Value'];
for i:=0 to arr.length-1 do
begin
   item := arr.O[i];
   ....
end;
в каждом item есть массив E в нем объекты item2 получаем в цикле на месте строки 5
Delphi
1
2
3
4
5
6
arr2:=item.A['E'];
for j:=0 to arr2.length-1 do
begin
  item2:=arr2.O[j];
  .....
end;
в каждом Item2 есть С, G, T, иногда P
Delphi
1
2
3
C_VALUE := Item2.F['C'];
T_VALUE := Item2.I['T'];
...
1
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
02.06.2016, 21:27  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
i.count не бывает. i - это integer
я перепутал...делал i.size
пипец...делал с начало вот как вы показали...но делал в новом коде...
а надо было в
Delphi
1
2
3
4
begin
   item := arr.O[i];
вот тут надо было item2 получать...
end;
спасибо вам.
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
05.06.2016, 13:38  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
....
здравствуйте,и снова я)))
подскажите пожалуйста,бывает что в в массиве "Value" нет объектов
пример
HTML5
1
{"Error":"","ErrorCode":0,"Guid":"","Id":0,"Success":true,"Value":[]}
как узнать если там нет объектов то выход из процедуры?
спасибо.
а то я с json вообще не знаю...
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
05.06.2016, 14:15
посмотрите в код внимательнее
тут уже не в JSON дело вовсе
Delphi
1
for i:=0 to arr.Length-1
количество элементов массива arr = arr.length
проверяйте его и делайте Exit;
1
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
05.06.2016, 14:55  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
посмотрите в код внимательнее
тут уже не в JSON дело вовсе
Delphi
1
for i:=0 to arr.Length-1
количество элементов массива arr = arr.length
проверяйте его и делайте Exit;
я вас понял,так и делал...
думал может по другому надо как-то...

Delphi
1
2
3
4
 if Arr.Length < 0 then begin
 showmessage('массив пустой...');
   exit;
 end;
ну теперь проблема в том что нужно понять на каком моменте он пустой...
при 0 он выбивает программную ошибку,значит массив не бывает нулевым...
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
05.06.2016, 15:22
нет
не должно быть никакой ошибки если там
JSON
1
"Value":[]
вот если там
JSON
1
"Value":null
вот это другой вариант

Добавлено через 1 минуту
Цитата Сообщение от HREST Посмотреть сообщение
Arr.Length < 0
у вас число элементов массива "руки" может быть равно 2, 1, даже нулю, но меньше - Это как???
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
05.06.2016, 15:27  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
нет
не должно быть никакой ошибки если там
JSON
1
"Value":[]
вот если там
JSON
1
"Value":null
вот это другой вариант
Delphi
1
2
3
4
5
6
 for i := 0 to Arr.Length-1 do
  begin
 if Arr.Length < 0 then begin
 showmessage('массив пустой...');
   exit;
 end;
ошибка на картинке
если сделать Arr.Length < 50 (так для проверки...)
получает объекты и потом при меньше 50 объектов
выбивает showmessage('массив пустой...');
Миниатюры
Как распарсить JSON?  
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
05.06.2016, 16:03  [ТС]
как бы поймать этот самый момент...
даже пробовал Arr.Length < 1-10
все равно не моя ошибка...
значит массив не пустой но как так...
он всегда вот такой
HTML5
1
{"Error":"","ErrorCode":0,"Guid":"","Id":0,"Success":true,"Value":[]}
если там нет объектов...

Добавлено через 33 минуты
всё допер...
HTML5
1
2
3
4
5
6
50
50
50
50
10
0
надо было мне
Delphi
1
2
3
4
if Arr.Length < 1 then begin
 showmessage('массив пустой...');
   exit;
 end;
до
Delphi
1
2
 for i := 0 to Arr.Length-1 do
  begin
проверять...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2016, 16:03

Распарсить json
Доброго дня, необходимо распарсить '{&quot;result&quot;:,&quot;final&quot;:true}],&quot;result_index&quot;:0}' просмотрел несколько способов ни одним не получается...

Распарсить Json строку
есть строчка помогите распарсить ее ( составьте регулярку) или дайте линку почитать как правильно это сделать. или же лучше - pos...

Распарсить Json-ответ сервера Vk
В общем получил ответ от сервера в вк в формате Json. Каким образом с помощью DBXJSON можно распарсить его? Интересует как получить...

Как распарсить данные из первого json-а и перекинуть их в другой json
Добрый день, столкнулся с такой задачей. Есть вот такой json Необходимо извлечь некоторые данные, провести некоторые...

Как распарсить json?
Всем здрасте. Я только начинаю программировать и многого не понимаю, поэтому отнеситесь с пониманием. Прошу помощи, помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru