Images

Tutorial Mengambil value Json dari webservie / API menggunakan RestClient Delphi

sebelum masuk ke pembahasan saya cerita sedikit manfaat dari topik kali ini. sebelumnya saya menggunakan komponen Rest untuk mengambil data Json yg ada di webservise. sebelum saya tahu metode ini saya mengunakan banyak komponen agar data json bisa saya tampilkan ke aplikasi, dan itu sangat boros resource dan besarnya file aplikasi. biasanya untuk mengambil data json dari webservice saya butuh setidaknya 6 komponen yang hampir saya tidak tahu fungsinya masing2 yg disediakan dari Restdebugger


sekarang sudah tidak perlu lagi menggunakan banyak2 komponen. cukup RestRequest dan RestClient.

1. Mengambil JSONValue / JSONObject
contoh output dari json

{ "id_user": "6", "NAMA": "Risandy Ka", "STATUS": "Aku Berada di rumah", "LATITUDE": "", "LONGITUDE": "", "TANGGAL": "2019-08-01 22:56:10" }
Code Delphi :
procedure TFMain.Button1Click(Sender: TObject);
var
        jsn : TJSONObject;
begin
     DM.RESTClient_status.BaseURL := 'http://localhost/aplikasi/peg_status.php?act=onestatus&id_status=222';
      DM.RestRequest_status.ExecuteAsync();
      Sleep(2000);
      jsn := DM.RESTResponse_status.JSONValue as TJSONObject;
      Memo1.Text := jsn.Values['STATUS'].Value;
      TabControl_home.TabIndex := 3;
end;
 2. Mengambil JSONarray
ini jika json nya berbentuk array atau lebih dari 1 data
contoh outputnya
[{ "id_user": "6", "NAMA": "Risandy Ka", "STATUS": "Aku Berada di rumah", "LATITUDE": "", "LONGITUDE": "", "TANGGAL": "2019-08-01 22:56:10" },{ "id_user": "6", "NAMA": "Risandy Ka", "STATUS": "Dalam perjalanan", "LATITUDE": "", "LONGITUDE": "", "TANGGAL": "2019-08-01 22:56:10" },{ "id_user": "6", "NAMA": "Risandy Ka", "STATUS": "Lagi di kampus", "LATITUDE": "", "LONGITUDE": "", "TANGGAL": "2019-08-01 22:56:10" }] 
Code Delphi :
procedure TFMain.Button1Click(Sender: TObject);
var
       id_user, NAMA, STATUS, LATITUDE, LONGITUDE, TANGGAL, URL : string;
       JSN: TJSONObject;
       JSNarry : TJSONArray;
 begin
       JSNarry := DM.RESTResponse_status.JSONValue as TJSONArray;
       for i := 0 to  JSNarry.Count  do
       begin
                 JSN := JSNarry.Items[i] as TJSONObject;
                 id_user     := JSN.Values['id_user'].Value;
                 NAMA        := JSN.Values['NAMA'].Value;
                 STATUS      := JSN.Values['STATUS'].Value;
                 LATITUDE    := JSN.Values['LATITUDE'].Value;
                 LONGITUDE   := JSN.Values['LONGITUDE'].Value;
                 TANGGAL     := JSN.Values['TANGGAL'].Value;
               
Add_status(id_user, NAMA, STATUS, LATITUDE, LONGITUDE, TANGGAL, LV);
         end;
  end;
diatas adalah cara menggunakan komponen rest. berikut jika ingin menggunakan TNetHTTPClient dan IHTTPRespon menampilkan output json

Contoh output json nya jika menggunakan mode post
[
    {
    "id_user":"13",
    "id_fb":null,
    "NAMA":"VIVI PRATIWI",
    "EMAIL":"viri@gmail.com"
  }
]
jika digunakan di browser tidak akan tampil harus jadi menggunakan restdebugger untuk mengetahui outputnya


code webservice phpnya
elseif ($act=='login1'){ $EMAIL = $_POST['EMAIL'];  $NAMA = $_POST['NAMA'];  $data = mysql_query("SELECT id_user, id_fb, NAMA, EMAIL FROM peg_user WHERE EMAIL='$EMAIL' and NAMA='$NAMA'"); if (mysql_num_rows($data)>0){  while ($row = mysql_fetch_assoc($data)){  $respon[] = $row; } else { echo json_encode($respon,JSON_PRETTY_PRINT); }
nah untuk mengambil value json nya di delphi :
procedure TFMain.Button1Click(Sender: TObject);
var
      idh : TNetHTTPClient;
      params: TStringList;
      s, strjsn : string;
      httpresult : IHTTPResponse ;
      jo: TJSONObject;
      jv, jvl:TJSONValue;
begin
          idh := TNetHTTPClient.Create(self);
          try
              params:=tstringlist.Create;
              params.AddPair('EMAIL',edt_EMAIL.Text);
              params.AddPair('NAMA',edt_NAMA.Text);
              httpresult := idh.Post('http://rasoftware.net/aplikasi/service_nugo/peg_user.php?act=login1', params);
          finally
              idh.Free;
          end;
    strjsn:=httpresult.ContentAsString();
    jvl := tjsonobject.ParseJSONValue(strjsn);
    If jvl is tjsonarray then
    for jv in (jvl as TJSONArray) do
    begin
      if jv is tjsonobject then
        begin
        jo := jv as tjsonobject;
        s := jo.GetValue<string>('id_user');
        edt_id_user.Text:= s;
        end;
    end;
end;
ingat contoh tadi jika json nya array. jika bukan array tinggal disesuaikan saja.
sekian sharing saya. jika ada penambahan saya akan ubah dilain waktu.

2 komentar:

  1. terimakassih sangat membantu. mau tanya kalau mengakses nya melalui ssl atau https: gmn sis? karena sy coba eror ssl library not found,terimakasih

    BalasHapus