Verbindung mit bestehendem Server

Alle Fragen zur Netzwerkkommunikation
Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: Verbindung mit bestehendem Server

Beitrag von theo »

ChrisvB hat geschrieben: Es hätte so einfach sein können ;)
Es ist einfach. Du musst es nur machen.
Es steht alles in den letzten drei Methoden in frmmain.pp des JSONViewers

Code: Alles auswählen

    procedure OpenFile(const AFileName: String);
    procedure ShowJSONData(AParent: TTreeNode; Data: TJSONData);
    procedure ShowJSONDocument;   
Wenn du das mit dieser Vorlage nicht hinkriegst, wird es schwierig dir zu helfen.

ChrisvB
Beiträge: 38
Registriert: Mi 15. Apr 2015, 09:00
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Verbindung mit bestehendem Server

Beitrag von ChrisvB »

Doch Doch keine Sorge, hab es hingekriegt und bevor ich meine nächste Frage stelle möchte ich mich erstmal hier bei allen bedanken die mir immer wieder Antworten auf für Lazarus kundige dumme Fragen geben ;)

Also hier direkt die nächste ;)

Mein JSON sieht ungefähr so aus:

{"response":{"status":0,"startRow":0,"endRow":1,"totalRows":1,"dataSource":"","data":[{"diskfree":"12 GiB","doublecheck":true,"langid":"de-de","servername":"","useremail":"None","userid":"1","userlogin":"appadmin","username":"AppAdmin","userperms":["admin_web","admin_mail"],"userroles":["AppAdmin"],"userused":"---","webdavpath":""}],"reLogin":false}}

Wie kann ich mir jetzt z.B. nur das userlogin und den username in einem Memo ausgeben lassen. Also z.B. "Sie sind eingeloggt als ...".

Vielen Dank

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Verbindung mit bestehendem Server

Beitrag von m.fuchs »

Code: Alles auswählen

program Project1;
 
{$mode objfpc}{$H+}
 
uses
 Classes, SysUtils, jsonparser, fpjson;
 
const
  JsonText = '{"response":{"status":0,"startRow":0,"endRow":1,"totalRows":1,"dataSource":"","data":[{"diskfree":"12 GiB","doublecheck":true,"langid":"de-de","servername":"","useremail":"None","userid":"1","userlogin":"appadmin","username":"AppAdmin","userperms":["admin_web","admin_mail"],"userroles":["AppAdmin"],"userused":"---","webdavpath":""}],"reLogin":false}}';
 
 
var
  Data: TJSONObject;
  Parser: TJSONParser;
  UserLogin, Username: String;
 
begin
  try
    Parser := TJSONParser.Create(JsonText);
    Data := TJSONObject(Parser.Parse);
    UserLogin := Data.Objects['response'].Arrays['data'].Objects[0].Strings['userlogin'];
    Username := Data.Objects['response'].Arrays['data'].Objects[0].Strings['username'];
    WriteLn('Userlogin: ' + UserLogin);
    WriteLn('Username: ' + UserName);
    ReadLn;
  finally
    FreeAndNil(Data);
    FreeAndNil(Parser);
  end;
end.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: Verbindung mit bestehendem Server

Beitrag von theo »

So geht auch:

Code: Alles auswählen

D.FindPath('response.data[0].username').AsString;  

ChrisvB
Beiträge: 38
Registriert: Mi 15. Apr 2015, 09:00
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Verbindung mit bestehendem Server

Beitrag von ChrisvB »

Danke :)

ChrisvB
Beiträge: 38
Registriert: Mi 15. Apr 2015, 09:00
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Verbindung mit bestehendem Server

Beitrag von ChrisvB »

und schon kommt die nächste Frage

wollte nun ein Array Userperms auf einen Wert hin überprüfen, wenn der Wert nicht im Array steht soll automatisch ausgeloggt werden.

Hatte mir gedacht, dass ich mit einer schleife erst einmal die Arrays auslese und dann mit einer Fallunterscheidung prüfe, ob ein bestimmter Wert im Array ist.

oder gibt es da einen einfacheren Weg ?

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: Verbindung mit bestehendem Server

Beitrag von theo »

ChrisvB hat geschrieben: oder gibt es da einen einfacheren Weg ?
Was denn zum Beispiel? Mir fällt nichts ein, wie das noch einfacher gehen könnte.

ChrisvB
Beiträge: 38
Registriert: Mi 15. Apr 2015, 09:00
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Verbindung mit bestehendem Server

Beitrag von ChrisvB »

okay :)

ChrisvB
Beiträge: 38
Registriert: Mi 15. Apr 2015, 09:00
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Verbindung mit bestehendem Server

Beitrag von ChrisvB »

So :)

wie bekomme ich die variable Zahl in das JSON Argument

for i := 0 to 14 do
begin
zahl := InttoStr(i) ;
memo2.text := D.FindPath('response.data[0].userperms['+zahl+']').AsString;
end;

so klappt es leider nicht auch nicht, wenn ich Zahl mit direkt ins Argument vom Response schreibe

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: Verbindung mit bestehendem Server

Beitrag von theo »

:roll:
Schon mal überlegt, wozu die "0" bei "data" gut ist?

ChrisvB
Beiträge: 38
Registriert: Mi 15. Apr 2015, 09:00
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Verbindung mit bestehendem Server

Beitrag von ChrisvB »

Das Problem hat sich schon erledigt :)

ChrisvB
Beiträge: 38
Registriert: Mi 15. Apr 2015, 09:00
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Verbindung mit bestehendem Server

Beitrag von ChrisvB »

Es ist ein neues Problem aufgetreten. Habe auch schon einiges versucht es zu lösen, aber irgendwie habe ich irgendwas übersehen bzw. nicht richtig durchdacht.

Code: Alles auswählen

 for i:= 0 to 13 do
   begin
     zahl := InttoStr(i) ;
     memo2.Append(D.FindPath('response.data[0].userperms['+zahl+']').AsString);
     end;      
 
So klappt es für diesen einen Fall in dem Userperms 14 Arrays besitzt. Nun handelt es sich hier um ein dynamisches Array, welches die Größe dem Account anpasst.

Wie kann ich also vorher auslesen wie "voll" Userperms ist.

Hab es schon am Anfang mit i:= 0 to n probiert aber komme da nie so richtig zu einem Ergebnis
Zuletzt geändert von Lori am Mi 6. Mai 2015, 20:49, insgesamt 1-mal geändert.
Grund: Highlighter

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: Verbindung mit bestehendem Server

Beitrag von theo »

ChrisvB hat geschrieben: Wie kann ich also vorher auslesen wie "voll" Userperms ist.

Code: Alles auswählen

TJSONArray(D.FindPath('response.data[0].userperms')).Count

ChrisvB
Beiträge: 38
Registriert: Mi 15. Apr 2015, 09:00
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Verbindung mit bestehendem Server

Beitrag von ChrisvB »

Dankeschön :)

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: Verbindung mit bestehendem Server

Beitrag von theo »

Aber um alle Werte auszugeben wäre schöner:

Code: Alles auswählen

var F: TJSONEnum;   
...
For F in D.FindPath('response.data[0].userperms') do ShowMessage(F.Value.AsString);

Antworten