Json Beispiel

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Json Beispiel

Beitrag von reiter »

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

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Json Beispiel

Beitrag von sstvmaster »

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

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Json Beispiel

Beitrag von reiter »

Danke schön, schaue ich mir nachher noch an..

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Json Beispiel

Beitrag von reiter »

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

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Json Beispiel

Beitrag von sstvmaster »

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

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Json Beispiel

Beitrag von reiter »

Vielen Dank, probiere ich nachher gleich aus..
Gruß
Reiter

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Json Beispiel

Beitrag von Warf »

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;

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Json Beispiel

Beitrag von reiter »

Super, danke das hilft mir schon mal ne Ecke weiter

Antworten