AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke JSON interpretieren mit SuperObject
Thema durchsuchen
Ansicht
Themen-Optionen

JSON interpretieren mit SuperObject

Ein Thema von MartinK · begonnen am 5. Okt 2014 · letzter Beitrag vom 6. Okt 2014
Antwort Antwort
Seite 1 von 2  1 2      
MartinK

Registriert seit: 21. Jun 2009
Ort: Germering (Germany)
89 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

JSON interpretieren mit SuperObject

  Alt 5. Okt 2014, 19:50
Wieso nur bekomme ich mit diesem SourceCode nicht den "Value" von "aktCa" ausgelesen

Delphi-Quellcode:
Var
  JSON_Txt: String;
  test: String;
  JSON: ISuperObject;
begin
 JSON_Txt := '{"response":"tank","date":"2014-10-05 19:56:15"},{"Tank":{"id":"B0DB7A37-9086-43B0-8468-C54908121150-142-00000000EE6AB2C4","aktAlk":"750","aktCa":"450","aktMg":"1335",}}';
 JSON:=SO(JSON_Txt);
 test := JSON.AsObject.S['aktCa'];
end;

lG Martin
Martin Kuhn

Geändert von mkinzler ( 5. Okt 2014 um 19:55 Uhr) Grund: Delphi-Tag korrigiert
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: JSON interpretieren mit SuperObject

  Alt 5. Okt 2014, 20:00
Wieso nur bekomme ich mit diesem SourceCode nicht den "Value" von "aktCa" ausgelesen

JSON_Txt := '{"response":"tank","date":"2014-10-05 19:56:15"},{"Tank":{"id":"B0DB7A37-9086-43B0-8468-C54908121150-142-00000000EE6AB2C4","aktAlk":"750","aktCa":"450","ak tMg":"1335",}}';
Das ist kein gültiges JSON Dokument. Es ist ein String, in dem zwei JSON Dokument nacheinander stehen:
1.)
Code:
{"response":"tank","date":"2014-10-05 19:56:15"}
2.)
Code:
{"Tank":{"id":"B0DB7A37-9086-43B0-8468-C54908121150-142-00000000EE6AB2C4","aktAlk":"750","aktCa":"450","aktMg":"1335",}}
Das zweite Dokument ist leider syntaktisch fehlerhaft: das letzte Komma wird von keinem Wert gefolgt. Gültig wäre:
Code:
{
    "Tank": {
        "id": "B0DB7A37-9086-43B0-8468-C54908121150-142-00000000EE6AB2C4",
        "aktAlk": "750",
        "aktCa": "450",
        "aktMg": "1335"
    }
}
Michael Justin
habarisoft.com

Geändert von mjustin ( 5. Okt 2014 um 20:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: JSON interpretieren mit SuperObject

  Alt 5. Okt 2014, 20:43
Es gibt im Netz diverse JSON Validators die man online benutzen kann.

Wenn irgendwas nicht funktioniert, dann schickt man den JSON string erst mal durch so einen Validator
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#4

AW: JSON interpretieren mit SuperObject

  Alt 5. Okt 2014, 20:46
Hier gibt es einen JSON Visualisierer mit Validator.
  Mit Zitat antworten Zitat
MartinK

Registriert seit: 21. Jun 2009
Ort: Germering (Germany)
89 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: JSON interpretieren mit SuperObject

  Alt 5. Okt 2014, 21:21
Danke Euch dreien. Super !
ich sehe schon, da muss ich noch etwas "Hand anlegen"
(...ist für mich halt noch ein noch ganz neues Thema)

was ich nun mache ist
- den ersten JSON String einfach entfernen
- mir den zweiten parsen

Wie Michael vollkommenkorrekterweise bemerkt hat ist der string fehlerhaft.... da ich ihn stark gekürzt habe
vollständigerweise würde er zB lauten

{"Tank":{"id":"B0DB7A37-9086-43B0-8468-C54908121150-142-00000000EE6AB2C4","aktAlk":"750","aktCa":"450","ak tMg":"1335","aktSal":"3478","caAlkMgAusgleichDosie rungAlk":"1.00","caAlkMgAusgleichDosierungCal":"1. 00","caAlkMgAusgleichDosierungMg":"1.00","caAlkMgA usgleichDosierungNaClSalz":"1.00","caAlkMgVerbrauc hAlkAusg":"7.00","caAlkMgVerbrauchAlkEndwert":"7.2 0","caAlkMgVerbrauchAlkTage":"7","caAlkMgVerbrauch CaAusg":"400","caAlkMgVerbrauchCaEndwert":"375","c aAlkMgVerbrauchCaTage":"7","caAlkMgVerbrauchMgAusg ":"1350","caAlkMgVerbrauchMgEndwert":"1335","caAlk MgVerbrauchMgTage":"70","changeVolume":"3","conduc tivityIst":"0.0000","conductivitySoll":"0.0000","d ensityIst":"10232.0000","densitySoll":"0.0000","re lDensityIst":"0.0000","relDensitySoll":"0.0000","r ez1Stamml":"0","rez2Stamml":"0","rez3Stamml":"1"," rezAlkErhAlk":"88","rezeptur":"3","rezErhCalAlk":" 0","rezErhMagnesium":"100","rezKonzAlk":"100.00"," rezKonzCalcium":"400.00","rezKonzentration":"0","r ezKonzMag":"400.00","rezKonzNaCL":"0.00","rezNaClf reiesSalz":"0","rezTrace1":"1","rezTrace1Quant":"5 .00","rezTrace2":"1","rezTrace2Quant":"5.00","rezT race3":"1","rezTrace3Quant":"5.00","rezTraceTyp1": "Trace-B: Schwermetall Komplex","rezTraceTyp2":"Trace-B: Strontium\/Barium Komp","rezTraceTyp3":"Jod\/Fluor Komplex","salIst":"3478","salSoll":"3480","temp":" 2480","tempF":"7664","volume":"34","wasserwechselM itCaAlkMG":false,"UserID":"52f3c814-2994-4945-adaa-0cd1b01c12f4","name":"ShallowReef","lastChanged":" 2014-10-01 22:04:14","created":"2014-04-13 18:20:00","UID":"FE46A623-94C7-43CD-AF90-7393642B24E6","deleted":false,"laenge":"3000","bre ite":"3000","tiefe":"4000","established":"2013-04-01","typeid":"56c051c4-ce56-11e3-b688-001c423ac3a5","note":"","like_count":"0","salzid": "","einheitensystem":"0","messmethodeSalz":"0","al kalinitaet":null,"relDichteTemp":"25"}}


er wird von dem Validator auch korrekt erkannt

allerdings liefert: test := JSON.AsObject.S['aktCa'];
-> trotzdem nur '';

LG Martin
Martin Kuhn

Geändert von MartinK ( 5. Okt 2014 um 21:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: JSON interpretieren mit SuperObject

  Alt 5. Okt 2014, 21:46
Ja logisch

Und damit?
JSON.AsObject.S['Tank.aktCa']; Warum, sieht man wenn man formatiert
Code:
{
    "Tank": {
        "id": "B0DB7A37-9086-43B0-8468-C54908121150-142-00000000EE6AB2C4",
        "aktAlk": "750",
        "aktCa": "450",
        "ak tMg": "1335",
        "aktSal": "3478",
        "caAlkMgAusgleichDosie rungAlk": "1.00",
        "caAlkMgAusgleichDosierungCal": "1. 00",
        "caAlkMgAusgleichDosierungMg": "1.00",
        "caAlkMgA usgleichDosierungNaClSalz": "1.00",
        "caAlkMgVerbrauc hAlkAusg": "7.00",
        "caAlkMgVerbrauchAlkEndwert": "7.2 0",
        "caAlkMgVerbrauchAlkTage": "7",
        "caAlkMgVerbrauch CaAusg": "400",
        "caAlkMgVerbrauchCaEndwert": "375",
        "c aAlkMgVerbrauchCaTage": "7",
        "caAlkMgVerbrauchMgAusg ": "1350",
        "caAlkMgVerbrauchMgEndwert": "1335",
        "caAlk MgVerbrauchMgTage": "70",
        "changeVolume": "3",
        "conduc tivityIst": "0.0000",
        "conductivitySoll": "0.0000",
        "d ensityIst": "10232.0000",
        "densitySoll": "0.0000",
        "re lDensityIst": "0.0000",
        "relDensitySoll": "0.0000",
        "r ez1Stamml": "0",
        "rez2Stamml": "0",
        "rez3Stamml": "1",
        " rezAlkErhAlk": "88",
        "rezeptur": "3",
        "rezErhCalAlk": " 0",
        "rezErhMagnesium": "100",
        "rezKonzAlk": "100.00",
        " rezKonzCalcium": "400.00",
        "rezKonzentration": "0",
        "r ezKonzMag": "400.00",
        "rezKonzNaCL": "0.00",
        "rezNaClf reiesSalz": "0",
        "rezTrace1": "1",
        "rezTrace1Quant": "5 .00",
        "rezTrace2": "1",
        "rezTrace2Quant": "5.00",
        "rezT race3": "1",
        "rezTrace3Quant": "5.00",
        "rezTraceTyp1": "Trace-B: Schwermetall Komplex",
        "rezTraceTyp2": "Trace-B: Strontium/Barium Komp",
        "rezTraceTyp3": "Jod/Fluor Komplex",
        "salIst": "3478",
        "salSoll": "3480",
        "temp": " 2480",
        "tempF": "7664",
        "volume": "34",
        "wasserwechselM itCaAlkMG": false,
        "UserID": "52f3c814-2994-4945-adaa-0cd1b01c12f4",
        "name": "ShallowReef",
        "lastChanged": " 2014-10-01 22:04:14",
        "created": "2014-04-13 18:20:00",
        "UID": "FE46A623-94C7-43CD-AF90-7393642B24E6",
        "deleted": false,
        "laenge": "3000",
        "breite": "3000",
        "tiefe": "4000",
        "established": "2013-04-01",
        "typeid": "56c051c4-ce56-11e3-b688-001c423ac3a5",
        "note": "",
        "like_count": "0",
        "salzid": "",
        "einheitensystem": "0",
        "messmethodeSalz": "0",
        "al kalinitaet": null,
        "relDichteTemp": "25"
    }
}
Eine Frage hätte ich noch:

Wer hat denn diesen JSON so verbrochen? Der sollte sich auf jeden Fall mal auf http://json.org schlau lesen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 5. Okt 2014 um 21:57 Uhr)
  Mit Zitat antworten Zitat
MartinK

Registriert seit: 21. Jun 2009
Ort: Germering (Germany)
89 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: JSON interpretieren mit SuperObject

  Alt 6. Okt 2014, 09:46
Hmm, Nein das funktioniert leider auch (noch) nicht.

ich poste hier nochmal meinen aktuellen Code

Delphi-Quellcode:
procedure TForm1.BtnACloudClick(Sender: TObject);
Var
  iDHTTP: TIdHttp;

  aBody, JSON_Response: String;
  aStr, aUsername,aPassword : String;
  JSON: ISuperObject;
  PosSTR:String;
  Pos1: Integer;
begin
  aUsername := 'MyUsername';
  aPassword := 'MyPassword';

  IdHttp := TIdHttp.Create(nil);
  iDHTTP.HandleRedirects := True;
  iDHTTP.Request.BasicAuthentication := True;
  iDHTTP.Request.Authentication := TIdBasicAuthentication.Create;
  iDHTTP.Request.Authentication.Username := aUsername;
  iDHTTP.Request.Authentication.Password := aPassword;
  IdHTTP.Request.ContentType := 'application/json';

  aBody := 'http://test.acalc.de/tanks/changed.json?date=1970-01-01 00:00:00';
  JSON_Response := IdHttp.Get(aBody);
  //ClipBoard.AsText := JSON_Response;

  //Cut Off first JSON String which is returned but not needed
  PosSTR := '},'; //look for this characters (it is the end of the unneeded first JSON String)
  Pos1 := POS(PosSTR ,JSON_Response);
  Delete(JSON_Response,1,Pos1+ length(PosSTR) -1);
  //ClipBoard.AsText := JSON_Response;

  //Delete ']' (which is crap) at the end
  Delete(JSON_Response,Length(JSON_Response),1);
  //ClipBoard.AsText := JSON_Response;

  JSON := SO(JSON_Response);
  aStr := JSON.AsObject.S['Tank.aktCa'];

  IdHTTP.Free;
end;

hier nochmal der kpl. String welcher hier

JSON := SO(JSON_Response); "übergeben" wird



{"Tank":{"id":"B0DB7A37-9086-43B0-8468-C54908121150-142-00000000EE6AB2C4","aktAlk":"750","aktCa":"450","ak tMg":"1335","aktSal":"3478","caAlkMgAusgleichDosie rungAlk":"1.00","caAlkMgAusgleichDosierungCal":"1. 00","caAlkMgAusgleichDosierungMg":"1.00","caAlkMgA usgleichDosierungNaClSalz":"1.00","caAlkMgVerbrauc hAlkAusg":"7.00","caAlkMgVerbrauchAlkEndwert":"7.2 0","caAlkMgVerbrauchAlkTage":"7","caAlkMgVerbrauch CaAusg":"400","caAlkMgVerbrauchCaEndwert":"375","c aAlkMgVerbrauchCaTage":"7","caAlkMgVerbrauchMgAusg ":"1350","caAlkMgVerbrauchMgEndwert":"1335","caAlk MgVerbrauchMgTage":"70","changeVolume":"3","conduc tivityIst":"0.0000","conductivitySoll":"0.0000","d ensityIst":"10232.0000","densitySoll":"0.0000","re lDensityIst":"0.0000","relDensitySoll":"0.0000","r ez1Stamml":"0","rez2Stamml":"0","rez3Stamml":"1"," rezAlkErhAlk":"88","rezeptur":"3","rezErhCalAlk":" 0","rezErhMagnesium":"100","rezKonzAlk":"100.00"," rezKonzCalcium":"400.00","rezKonzentration":"0","r ezKonzMag":"400.00","rezKonzNaCL":"0.00","rezNaClf reiesSalz":"0","rezTrace1":"1","rezTrace1Quant":"5 .00","rezTrace2":"1","rezTrace2Quant":"5.00","rezT race3":"1","rezTrace3Quant":"5.00","rezTraceTyp1": "Trace-B: Schwermetall Komplex","rezTraceTyp2":"Trace-B: Strontium\/Barium Komp","rezTraceTyp3":"Jod\/Fluor Komplex","salIst":"3478","salSoll":"3480","temp":" 2480","tempF":"7664","volume":"34","wasserwechselM itCaAlkMG":false,"UserID":"52f3c814-2994-4945-adaa-0cd1b01c12f4","name":"ShallowReef","lastChanged":" 2014-10-01 22:04:14","created":"2014-04-13 18:20:00","UID":"FE46A623-94C7-43CD-AF90-7393642B24E6","deleted":false,"laenge":"3000","bre ite":"3000","tiefe":"4000","established":"2013-04-01","typeid":"56c051c4-ce56-11e3-b688-001c423ac3a5","note":"","like_count":"0","salzid": "","einheitensystem":"0","messmethodeSalz":"0","al kalinitaet":null,"relDichteTemp":"25"}}

Und.... Ja besonders schön erstellt ist die JSON Struktur tatsächlich nicht (Reihenfolge durcheinander gewürfelt, D-Englisch, keine Arrays). Sie stammt von einem Bekannten der diese selbst so zusammengezimmert hat. Ich kann das vermutlich nicht umstellen sondern werde das wohl so übernehmen müssen.

LG Martin
Martin Kuhn
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#8

AW: JSON interpretieren mit SuperObject

  Alt 6. Okt 2014, 11:09
Der String ist ein gültiges JSON Dokument. Erscheint denn eine Fehlermeldung oder nur ein leeres Ergebnis?
Michael Justin

Geändert von mjustin ( 6. Okt 2014 um 11:44 Uhr)
  Mit Zitat antworten Zitat
MartinK

Registriert seit: 21. Jun 2009
Ort: Germering (Germany)
89 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: JSON interpretieren mit SuperObject

  Alt 6. Okt 2014, 12:09
Es erscheint nur ein leeres Ergebnis, d.h. aStr = '' nach dem Aufruf von

aStr := JSON.AsObject.S['Tank.aktCa'];
Martin Kuhn
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#10

AW: JSON interpretieren mit SuperObject

  Alt 6. Okt 2014, 12:43
Das geht:

aStr := JSON.O['Tank'].S['aktCa'];
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz