AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
Thema durchsuchen
Ansicht
Themen-Optionen

TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

Ein Thema von exasoft · begonnen am 18. Dez 2018 · letzter Beitrag vom 19. Dez 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#1

TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

  Alt 18. Dez 2018, 17:50
Hallo @ALL,
ich arbeite mich gerade etwas in REST ein und habe da ein kleines Problem - ist bestimmt nix Wildes

Wenn ich die Werte auslese
zB so:
var
o: TJSONObject;
begin
o := FJSONArray.Items[FCurrentIndex] as TJSONObject;
edStrasse.Text := o.GetValue('strasse').ToString;

, um sie anzuzeigen, dann stehen die in edStrasse.Text immer mit beginnendem und abschliessendem dopp. Hochkomma "hinterm Berg".

Ist das nur ne Einstellung oder was mache ich falsch/fehlt da?

Wäre super..

Tks vorab
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

  Alt 18. Dez 2018, 18:03
Es gibt einmal GetValue(..) und GetValue<T>(..) .


Du kannst die Werte direkt als String, Integer, Single usw. auslesen indem du die generische Version benutzt:

edStrasse.Text := o.GetValue<String>('strasse');
  Mit Zitat antworten Zitat
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#3

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

  Alt 18. Dez 2018, 20:59
Danke erstmal für die Info, aber irgendwie verstehe ich das nicht.

Ich habe die Sourcen 1:1 aus einem Delphi-Skill-Sprint übernommen und da gabs dieses Problem nicht.
(https://www.youtube.com/watch?v=_P6waeTlhVc)

Auf jeden Fall Tks - ich versuche es mal so und schaue mir die Objekte mal näher an, was da evtl. noch so geht.

RW
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#4

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

  Alt 18. Dez 2018, 22:35
TJSONValue.ToString() macht das Gleiche wie TJSONValue.ToJSON() und liefert den Wert als JSON zurück.

Ein JSON-String ist nun mal ein String mit Quotes.

Wenn du einfach nur den Wert (des JSON-String) haben möchtest, dann nimm TJSONValue.Value() .
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.211 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

  Alt 19. Dez 2018, 08:04
Vorsicht:

Code:
ToString
public
Returns a string containing the class name.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#6

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

  Alt 19. Dez 2018, 08:10
Vorsicht:

Code:
ToString
public
Returns a string containing the class name.
Nein, tut es nicht und ein Klick entfernt findet man das:
Delphi-Quellcode:
function TJSONAncestor.ToString: string;
var
  Buf: TStringBuilder;
begin
  Buf := TStringBuilder.Create(256);
  try
    ToChars(Buf);
    Result := Buf.ToString(True);
  finally
    Buf.Free;
  end;
end;
Wie so oft ist die Dokumentation nur ein Anhaltspunkt, gerade wenn wir es mit virtuellen Methoden zu tun haben.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.211 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

  Alt 19. Dez 2018, 08:28
Missverständnis: Ich wollte darauf hinweisen, was ToString üblicherweise macht. Dass ToString hier was anderes als den Klassennamen zurückliefert, ist eine Ausnahme (deren Sinn ich nicht sehe).
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#8

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

  Alt 19. Dez 2018, 08:33
Missverständnis: Ich wollte darauf hinweisen, was ToString üblicherweise macht. Dass ToString hier was anderes als den Klassennamen zurückliefert, ist eine Ausnahme (deren Sinn ich nicht sehe).
Die Methode ToString ist dafür da um eine String-Repräsentation der Klassen-Instanz zu bekommen. Diese Methode ist erstmalig bei TObject als virtual definiert (soll heißen: kann und darf überschrieben werden) und dort liefert diese einfach nur den Klassennamen zurück.

Diese Methode ist nicht dazu gedacht, den Klassennamen zu erhalten, das geht wesentlich besser über andere Wege.

So steht es auch in der Dokumentation:
Zitat:
Note: ToString is intended to be overridden in user-derived classes, to provide consumer objects with a string representation.

Geändert von Schokohase (19. Dez 2018 um 08:36 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

  Alt 19. Dez 2018, 08:42
TObject.ToString() ist nur so implementiert damit man überhaupt etwas hat. Besser als nichts 🤷
  Mit Zitat antworten Zitat
rd3

Registriert seit: 14. Aug 2015
21 Beiträge
 
#10

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas

  Alt 19. Dez 2018, 10:17
Hallo,

o.GetValue('strasse').Value;

sollte gehen. ToString ist hier nicht für gedacht.
  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 18:51 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