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

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

31.05.2016, 19:47. Показов 5419. Ответов 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
09.06.2016, 16:40  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от krapotkin Посмотреть сообщение
....
Здравствуйте,вы можете пожалуйста объяснить мне.
Пытаюсь записать item.S[''] и т.д в TStringList
но он выдает ошибку мне...
компилирует нормально.
но при получение item.S[''] выдает ошибку...

Delphi
1
2
3
4
5
6
Var
dobl: TStringList;
begin
dobl := TStringList.Create;
dobl.text:=item.S[''];
end;
пробовал даже так
Delphi
1
2
3
4
5
6
Var
dobl: TStringList;
begin
dobl := TStringList.Create;
dobl.add(item.S['']);
end;
программа либо зависает,либо выдает ошибку...
можно ли как то получить с начала во временную переменную,а от туда в listbox например?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
10.06.2016, 09:18
тут написано - сообщите мне значение строки по имени ''
нет имени-то! нет и результата )
Delphi
1
dobl.text:=item.S['name1'];
и сразу бы стало легче
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
10.06.2016, 14:46  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
тут написано - сообщите мне значение строки по имени ''
нет имени-то! нет и результата )
Delphi
1
dobl.text:=item.S['name1'];
и сразу бы стало легче
вот вся строка которая заносится в listbox
Delphi
1
listbox1.Items.Add('[ ВРЕМЯ НАЧАЛА '+UnixTimeToStr(strtoint(inttostr(item.i['S'])), -180)+' ] [ Тотал ('+FloatToStr(item2.F['P'])+') Б = '+FloatToStr(item2.F['C'])+' коф. ] [ '+item.S['L']+' ] [ П1 = '+FloatToStr(item3.F['C'])+' коф. > '+item.S['O1']+' ] ― [ П2 = '+FloatToStr(item4.F['C'])+' коф. > '+item.S['O2']+' ]');
в tstringlist не хочет это заносить
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
10.06.2016, 23:11
вот сразу в глаза бросается
strtoint(inttostr(item.i['S'])) === item.I['S']
UnixTimeToStr() - неизвестная мне функция
Есть UnixToDatTime и потом DateTimeToStr

такие строки лучше записывать через ф-ю Format
Delphi
1
2
3
4
5
6
7
8
9
10
11
listBox1.Items.Add( 
 Format('[ ВРЕМЯ НАЧАЛА %s ] [ Тотал (%f) Б = %f коф. ] [ %s ] [ П1 = %f коф. > %s ] ― [ П2 = %f коф. > %s ]',
  [DateTimeToStr(UnixToDateTime(item.i['S'])), 
  item2.F['P'], 
  item2.F['C'], 
  item.S['L'], 
  item3.F['C'], 
  item.S['O1'], 
  item4.F['C'], 
  item.S['O2']] )
);
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
10.06.2016, 23:28  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
вот сразу в глаза бросается
strtoint(inttostr(item.i['S'])) === item.I['S']
UnixTimeToStr() - неизвестная мне функция
Есть UnixToDatTime и потом DateTimeToStr
Delphi
1
2
3
4
function UnixTimeToStr(AUnixTime: DWord; ABias: Integer): string;
begin
Result := FormatDateTime('ddddd hh:nn:ss', UnixTimeToDateTime(AUnixTime, ABias));
end;
в "S" записана дата в unix формате...

Добавлено через 11 минут
и там время получает в UTС формате,пробовал таким же методом как Вы предложили,но время не соответствует тому что записан в объекте "S"
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
10.06.2016, 23:37
ну вот я примерно так и написал...

Добавлено через 34 секунды
добавить нужное число часов для вашего часового пояса несложно
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
10.06.2016, 23:48  [ТС]
я не спорю,согласен)))

Добавлено через 7 минут
Цитата Сообщение от krapotkin Посмотреть сообщение
ну вот я примерно так и написал...

Добавлено через 34 секунды
добавить нужное число часов для вашего часового пояса несложно
так а что со tstringlist делать?
как можно это всё записать куда то во временную переменную,а от туда в listbox обычный,просто нужно перед этим мне listbox очищать,но я не могу его постоянно очищать,его нужно один раз очистить и всё...
потому что туда заносятся постоянно данные...и если очищать listbox постоянно,то данные которые пришли до этого стираются...надо как то очистить listbox один раз,либо заносить всё во временную переменную,потом очищать listbox и потом переносить данные в listbox
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
11.06.2016, 08:00
я совсем не понял вопрос
что надо делать со StringList?
stringList - это просто список строк, все что угодно можно с ним делать
там просто строки лежат и всё
ListBox - это экранный компонент. В него встроен StringList и он показывает его содержимое на экране
какие данные куда приходят, неясно
у нас один файл, и мы его разбираем
что хотим получить и для чего стирать удалять и переносить я не знаю
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
11.06.2016, 10:16  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
я совсем не понял вопрос
что надо делать со StringList?
stringList - это просто список строк, все что угодно можно с ним делать
там просто строки лежат и всё
ListBox - это экранный компонент. В него встроен StringList и он показывает его содержимое на экране
какие данные куда приходят, неясно
у нас один файл, и мы его разбираем
что хотим получить и для чего стирать удалять и переносить я не знаю
как бы объяснить правильно,я же писал,что при попытке занести эту строку в tstringlist выбивает ошибку...
ну ладно,буду думать что делать
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
11.06.2016, 13:12
ошибка к стринглисту не имела никакого отношения
item.S[''] - попытка взять значение от ничего
тут и ошибка
при чем тут stringList и ListBox
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
11.06.2016, 13:19  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
ошибка к стринглисту не имела никакого отношения
item.S[''] - попытка взять значение от ничего
тут и ошибка
при чем тут stringList и ListBox
я же говорил...
мне надо вот эту строку
Delphi
1
listbox1.Items.Add('[ ВРЕМЯ НАЧАЛА '+UnixTimeToStr(strtoint(inttostr(item.i['S'])), -180)+' ] [ Тотал ('+FloatToStr(item2.F['P'])+') Б = '+FloatToStr(item2.F['C'])+' коф. ] [ '+item.S['L']+' ] [ П1 = '+FloatToStr(item3.F['C'])+' коф. > '+item.S['O1']+' ] ― [ П2 = '+FloatToStr(item4.F['C'])+' коф. > '+item.S['O2']+' ]');
занести в tsringlist или же в любую временную переменную,только он выбивает ошибку...
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
11.06.2016, 16:54
ОШИБКА НЕ В STRINGLIST!!!
Delphi
1
2
3
4
5
var s:string;
 
s:='[ ВРЕМЯ НАЧАЛА '+UnixTimeToStr(strtoint(inttostr(item.i['S'])), -180)+' ] [ Тотал ('+FloatToStr(item2.F['P'])+') Б = '+FloatToStr(item2.F['C'])+' коф. ] [ '+item.S['L']+' ] [ П1 = '+FloatToStr(item3.F['C'])+' коф. > '+item.S['O1']+' ] ― [ П2 = '+FloatToStr(item4.F['C'])+' коф. > '+item.S['O2']+' ]';
 
listbox1.Items.Add(s);
что, тут ошибка будет в строке S ???

какую ошибку показывает программа????
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
11.06.2016, 18:19  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
какую ошибку показывает программа????
Delphi
1
2
3
4
5
6
7
8
9
Var
s:TStringList;
begin
s:=TStringList.Create;
 
s.Text:='[ ВРЕМЯ НАЧАЛА '+UnixTimeToStr(strtoint(inttostr(item.i['S'])), -180)+' ] [ Тотал ('+FloatToStr(item2.F['P'])+') Б = '+FloatToStr(item2.F['C'])+' коф. ] [ '+item.S['L']+' ] [ П1 = '+FloatToStr(item3.F['C'])+' коф. > '+item.S['O1']+' ] ― [ П2 = '+FloatToStr(item4.F['C'])+' коф. > '+item.S['O2']+' ]';
 
listbox1.Items.Add(s.Text);
end;
я не понимаю...я с ума уже сошёл...до этого всегда выбивало ошибку...щас нормально...
все работает...
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
11.06.2016, 18:32
стринглист - это СПИСОК строк
каждая строка добавляется
s:string;
L:TStringList;
...
L.Add(s);
можно конечно присвоить сразу как в приведенном коде
Delphi
1
L.text := s;
в данном случае это то же самое, что все стереть и добавить одну строку
Delphi
1
2
L.Clear;
L.Add(s);
должно быть
Delphi
1
2
3
4
5
s:=format(...); // я писал выше
l.add(s);
...
// потом можно разом весь StringList вывести в ListBox
listBox.items.text:=L.text;
1
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
11.06.2016, 18:59  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
стринглист - это СПИСОК строк
каждая строка добавляется
s:string;
L:TStringList;
...
L.Add(s);
можно конечно присвоить сразу как в приведенном коде
Delphi
1
L.text := s;
в данном случае это то же самое, что все стереть и добавить одну строку
Delphi
1
2
L.Clear;
L.Add(s);
должно быть
Delphi
1
2
3
4
5
s:=format(...); // я писал выше
l.add(s);
...
// потом можно разом весь StringList вывести в ListBox
listBox.items.text:=L.text;
спасибо большое Вам за разъяснение.
0
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 77
18.06.2016, 10:59  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
....
Здравствуйте,и снова я.
имеется строка кода
Delphi
1
if (FloatToStr(item2.F['C'])  < combobox2.Text) then begin
ищет объект "C" и получает цифры с плавающей запятой.
в
Delphi
1
combobox2.Text
находиться число,до которой он получает цифры,допустим там 1,7
суть в том,как получить от и до? допустим от 1,2 до 1,7?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
18.06.2016, 11:50
Цитата Сообщение от HREST Посмотреть сообщение
(FloatToStr(item2.F['C']) *< combobox2.Text)
мне кажется, что вы хотели сравнивать числа, а не строки ?
вы отдаете себе отчет, что число 20>3 а строка '20' < '3' ?
Delphi
1
if item.F['C'] < strToFloat(combobox2.Text)
от чего до чего, я так и не понял??
вот обычное условие между (включительно)
Delphi
1
if (a>=b1)and(a<=b2) then
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.06.2016, 11:50

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
57
Ответ Создать тему
Новые блоги и статьи
Скрипты 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