Images

Tutorial Mengambil value Json dari webservie / API menggunakan NetHttpClient Delphi

Sebelumnya saya sudah membagikan cara menggunakan rest untuk mengambil value json dari webservice. nah kali ini saya akan membahas menggunakan komponen NethttpClient pada delphi untuk mengambil value json dari webservice.

berikut kelebihan dari NetHttpClient dibanding Komponen Rest di delphi
1. Penggunaan Coding lebih simple
2. Penggunaan Realtime dapat dilakukan dan lebih simple
3. Respon langsung di proses dan lebih cepat.

Berikut contoh code nya, oh iya untuk sampel kita pakai json webservice dari jsonplaceholder.typecode.com

1. Mengambil Json Array Method Get
Contoh Output Json

[ { "userId": 1, "id": 1, "title": "quidem molestiae enim" }, { "userId": 1, "id": 2, "title": "sunt qui excepturi placeat culpa" }, { "userId": 1, "id": 3, "title": "omnis laborum odio" }, { "userId": 1, "id": 4, "title": "non esse culpa molestiae omnis sed optio" }]

Code Delphi
2. Mengambil Json Object Method Get
Contoh Output Json
{ "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"}
Code Delphi
3. Mengambil Json Object Method Post
Contoh Output Json (karna outputnya responnya di batasi kita pakai seadanya saja)
{ "userId": 1, "id": 1
}
Code Delphi
4. Mengambil Json Array menggunakan looping
Contoh Output Json
[ { "userId": 1, "id": 1, "title": "quidem molestiae enim" }, { "userId": 1, "id": 2, "title": "sunt qui excepturi placeat culpa" }, { "userId": 1, "id": 3, "title": "omnis laborum odio" }, { "userId": 1, "id": 4, "title": "non esse culpa molestiae omnis sed optio" }]
Code delphi
5. Mengambil Json Object dan Array
Contoh Output Json
{"status":"informasi",
"message":"berhasil",
"data":[
{ "userId": 1, "id": 1, "title": "quidem molestiae enim" }, { "userId": 1, "id": 2, "title": "sunt qui excepturi placeat culpa" }, { "userId": 1, "id": 3, "title": "omnis laborum odio" }, { "userId": 1, "id": 4, "title": "non esse culpa molestiae omnis sed optio" }]}
Code delphi

Refrensi lain bisa liat disini
https://stackoverflow.com/questions/9608794/delphi-accessing-json-objects-within-a-json-array
https://gist.github.com/adilsoncarvalho/94e7d8bafe3821199993b2dda691beb3

Contoh Codenya disini : Download
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.