|
#1
|
|||
|
|||
JSON, Delphi
Добрый день. На данный момент я работаю в среде Delphi (а работаю я в ней 3 день), и взял на свою шкуру достаточно тяжелую задачу, которую уже частично выполнил.
Формулировка задачи: Мне нужно что бы моя программа брала расписание, обрабатывала, и выводила в приложении. Так же она берет группы и отделения. На данный момент всё что мне осталось - это обработка расписания в человеческий вид. Но, вся проблема в том, что тут я работаю через NMHTTP (забираю данные), и JSON (благодоря которому я преобразую эти данные). Вот текст моей программы: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uLkJSON, StdCtrls, Menus, ExtCtrls, Psock, NMHttp; type TForm1 = class(TForm) cbbOtdelenie: TComboBox; cbbGruppa1: TComboBox; btn1: TButton; lbl1: TLabel; ComboBox1: TComboBox; NMHTTP1: TNMHTTP; Label1: TLabel; procedure cbbOtdelenieChange(Sender: TObject); procedure btn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private today : TDateTime; day : string; public { Public declarations } end; var js: TlkJSONobject; jso: TlkJSONlist; s,s2:string; Form1: TForm1; o : array[1..5] of string; i:integer; implementation {$R *.dfm} procedure TForm1.cbbOtdelenieChange(Sender: TObject); begin case cbbOtdelenie.ItemIndex of 0:begin cbbGruppa1.Items.Clear; nmhttp1.get('http://weareinvaders.org/sched.php?method=getGroups&unit=0'); s := nmhttp1.body; jso := TlkJSON.ParseText(s) as TlkJSONlist; for i:=0 to jso.count - 1 do begin s := VarToStr(jso.Child[i].Field['name'].Value); //label1.caption:=s; cbbGruppa1.items.add(s); end; end; 1:begin cbbGruppa1.Items.Clear; nmhttp1.get('http://weareinvaders.org/sched.php?method=getGroups&unit=1'); s := nmhttp1.body; jso := TlkJSON.ParseText(s) as TlkJSONlist; for i:=0 to jso.count - 1 do begin s := VarToStr(jso.Child[i].Field['name'].Value); //label1.caption:=s; cbbGruppa1.items.add(s); end; end; 2:begin cbbGruppa1.Items.Clear; nmhttp1.get('http://weareinvaders.org/sched.php?method=getGroups&unit=2'); s := nmhttp1.body; jso := TlkJSON.ParseText(s) as TlkJSONlist; for i:=0 to jso.count - 1 do begin s := VarToStr(jso.Child[i].Field['name'].Value); //label1.caption:=s; cbbGruppa1.items.add(s); end; end; 3:begin cbbGruppa1.Items.Clear; nmhttp1.get('http://weareinvaders.org/sched.php?method=getGroups&unit=3'); s := nmhttp1.body; jso := TlkJSON.ParseText(s) as TlkJSONlist; for i:=0 to jso.count - 1 do begin s := VarToStr(jso.Child[i].Field['name'].Value); //label1.caption:=s; cbbGruppa1.items.add(s); end; end; end; end; procedure TForm1.btn1Click(Sender: TObject); begin form1.close; end; procedure TForm1.FormCreate(Sender: TObject); begin today := date; day := LongDayNames[DayOfWeek(today)]; lbl1.caption:=day; if dayofweek(today)=1 then combobox1.itemindex:=6 else combobox1.itemindex:=(DayOfWeek(today)-2); nmhttp1.get('http://weareinvaders.org/sched.php?method=getUnits'); s := nmhttp1.body; jso := TlkJSON.ParseText(s) as TlkJSONlist; for i:=0 to jso.count - 1 do begin s := VarToStr(jso.Child[i].Field['name'].Value); label1.caption:=s; cbbOtdelenie.items.add(s); end; { nmhttp1.get('http://weareinvaders.org/sched.php?method=getSchedule&unit=0&group=0'); s := nmhttp1.body; js := TlkJSON.ParseText(s) as TlkJSONobject; s := VarToStr(js.Child[i].Field['name'].Value); } end; end. Учитывая то, что этой ереси на JSON'е написано крайне много, просто кидаю ссылку, откуда моя программа его забирает - http://weareinvaders.org/sched.php?m...unit=0&group=0 Тут since - число изменения расписания (object), day - день (list), libday - библиотечный день или нет (object, true/false, при значении false вместо распиание выводится на экран "библ. день."), altercorp - нахимовский или бирюлево (1/0), lession - урок (list), name - название урока (object), teacher - имя и фамилия преподователя (object), a,b,ab - числитель или знаменатель. Необходимо сделать иммено через JSON. Оригинал расписания - http://mpt.ru/education/allocation.php?otdel=1&group=1 Заранее благодарен. |