Json Beispiel

Für Fragen von Einsteigern und Programmieranfängern...

Json Beispiel

Beitragvon reiter » 7. Nov 2019, 09:31 Json Beispiel

Hallo,
Ich habe eine Frage.
Das Beispiel von lazPlanet funktioniert soweit gut

Code: Alles auswählen
 
 
procedure TForm1.FormCreate(Sender: TObject);
var
  json: String;
  J: TJSONData;
begin
  // We hold our json data in a string.
  // The variable "json" is a string type.
  // We can also use TJSONStringType instead of string.
  json:='{"user":'+
    '{    "userid": 1900,'+
        '"username": "jsmith",'+
        '"password": "secret",'+
        '"groups": [ "admins", "users", "maintainers"]'+
    '}'+
  '}';
 
  // We send our JSON data to TJSONData. This is line 1 of our code.
  J:=GetJSON(json);
 
  // We show the username from the data
  // FindPath returns TJSONData
  // So we use .AsString to convert it to string. This is line 2.
  Caption :=  J.FindPath('user.username').AsString;
end;


http://lazplanet.blogspot.com/2014/09/a ... ample.html

Die Abfragen funktionieren, nur bei groups bekomm ich einen Fehler das er den Pfad nicht findet.
Wie komme ich jetzt an die Daten in der eckigen Klammer?
Die Abfrage von groups funktioniert auch in dem Beispiel nicht .

Bei Eingabe User.groups
Kommt die Fehlermeldung

Beispiel kann man dort laden

Danke
reiter
 
Beiträge: 128
Registriert: 18. Nov 2017, 16:58

Beitragvon sstvmaster » 7. Nov 2019, 15:32 Re: Json Beispiel

Hi,

Code: Alles auswählen
 
procedure TForm1.FormCreate(Sender: TObject);
var
  json: String;
  J: TJSONData;
  i: Integer;
begin
  // We hold our json data in a string.
  // The variable "json" is a string type.
  // We can also use TJSONStringType instead of string.
  json:='{"user":'+
    '{    "userid": 1900,'+
        '"username": "jsmith",'+
        '"password": "secret",'+
        '"groups": [ "admins", "users", "maintainers"]'+
    '}'+
  '}';
 
  // We send our JSON data to TJSONData. This is line 1 of our code.
  J:=GetJSON(json);
 
  // We show the username from the data
  // FindPath returns TJSONData
  // So we use .AsString to convert it to string. This is line 2.
  Caption :=  J.FindPath('user.username').AsString;
 
  // Groups
  for i := 0 to J.FindPath('user.groups').Count - 1 do // How many Items are in the Group
  begin
    ShowMessage(J.FindPath('user.groups['+ i.ToString + ']').AsString); // Iterate with i as a string value through items
  end;
end;
 


Nachtrag:
Die Group einträge sind wie ein Array zu betrachten, siehe eckige Klammern.
LG Maik
sstvmaster
 
Beiträge: 236
Registriert: 22. Okt 2016, 22:12
Wohnort: Dresden
OS, Lazarus, FPC: Windows 7 32bit (L 2.0.4 FPC 3.0.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon reiter » 7. Nov 2019, 17:56 Re: Json Beispiel

Danke schön, schaue ich mir nachher noch an..
reiter
 
Beiträge: 128
Registriert: 18. Nov 2017, 16:58

Beitragvon reiter » 7. Nov 2019, 23:08 Re: Json Beispiel

habs mal probiert... mit der Schleife liest er aber alle 3 Daten aus..
geht das auch irgendwie einzeln?

z.b. einlesen in ein Edit-Feld

Die Frage ist auch warum das von vornherein in dem Beispiel nicht geht

gruss
reiter
reiter
 
Beiträge: 128
Registriert: 18. Nov 2017, 16:58

Beitragvon sstvmaster » 8. Nov 2019, 08:29 Re: Json Beispiel

Sicherlich geht das auch einzeln.

Beispiel:
Code: Alles auswählen
 
...
'"groups": [ "admins", "users", "maintainers"]'
//            i = 0     i = 1    i = 2
//  Das sind hier die im deinem Beispiel möglich werte die "i" annehmen kann
...
 


Wenn du also nur "admins" haben willst musst du das so machen:
Code: Alles auswählen
 
...
  DieGruppe := J.FindPath('user.groups[0]').AsString;
  //                                   ^_ oder 1, oder 2
...
 
LG Maik
sstvmaster
 
Beiträge: 236
Registriert: 22. Okt 2016, 22:12
Wohnort: Dresden
OS, Lazarus, FPC: Windows 7 32bit (L 2.0.4 FPC 3.0.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon reiter » 8. Nov 2019, 15:09 Re: Json Beispiel

Vielen Dank, probiere ich nachher gleich aus..
Gruß
Reiter
reiter
 
Beiträge: 128
Registriert: 18. Nov 2017, 16:58

Beitragvon Warf » 8. Nov 2019, 16:35 Re: Json Beispiel

Oder, statt dir einen String erst zusammenzubauen, der dann nacher geparsed werden kann, benutz doch direkt die dafür vorgesehene funktionalität:
Code: Alles auswählen
var
  json: String;
  J, user: TJSONData;
  groups: TJSONArray;
  i: Integer;
begin
  // We hold our json data in a string.
  // The variable "json" is a string type.
  // We can also use TJSONStringType instead of string.
  json:='{"user":'+
    '{    "userid": 1900,'+
        '"username": "jsmith",'+
        '"password": "secret",'+
        '"groups": [ "admins", "users", "maintainers"]'+
    '}'+
  '}';
 
  // We send our JSON data to TJSONData. This is line 1 of our code.
  J:=GetJSON(json);
 
  user:=J.GetPath('user');
  groups := user.GetPath('groups') as TJSONArray;
  for i:=0 to groups.Count-1 do
    ShowMessage(groups.Strings[i]);
end;
Warf
 
Beiträge: 1262
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: MacOS | Win 10 | Linux | 
CPU-Target: x86_64
Nach oben

Beitragvon reiter » 8. Nov 2019, 19:07 Re: Json Beispiel

Super, danke das hilft mir schon mal ne Ecke weiter
reiter
 
Beiträge: 128
Registriert: 18. Nov 2017, 16:58

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

porpoises-institution
accuracy-worried