Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas (https://www.delphipraxis.net/199008-tjsonobject-getvalue-liefert-immer-werte-doppelten-hochkommas.html)

exasoft 18. Dez 2018 16:50

TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
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

Der schöne Günther 18. Dez 2018 17:03

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
Es gibt einmal
Delphi-Quellcode:
GetValue(..)
und
Delphi-Quellcode:
GetValue<T>(..)
.


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

Delphi-Quellcode:
edStrasse.Text := o.GetValue<String>('strasse');

exasoft 18. Dez 2018 19:59

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
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

Schokohase 18. Dez 2018 21:35

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
Delphi-Quellcode:
TJSONValue.ToString()
macht das Gleiche wie
Delphi-Quellcode:
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
Delphi-Quellcode:
TJSONValue.Value()
.

TigerLilly 19. Dez 2018 07:04

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
Vorsicht:

Code:
ToString
public
Returns a string containing the class name.

Schokohase 19. Dez 2018 07:10

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
Zitat:

Zitat von TigerLilly (Beitrag 1421209)
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.

TigerLilly 19. Dez 2018 07:28

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
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).

Schokohase 19. Dez 2018 07:33

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
Zitat:

Zitat von TigerLilly (Beitrag 1421212)
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
Delphi-Quellcode:
ToString
ist dafür da um eine String-Repräsentation der Klassen-Instanz zu bekommen. Diese Methode ist erstmalig bei
Delphi-Quellcode:
TObject
als
Delphi-Quellcode:
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:
Delphi-Quellcode:
ToString
is intended to be overridden in user-derived classes, to provide consumer objects with a string representation.

Der schöne Günther 19. Dez 2018 07:42

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
TObject.ToString() ist nur so implementiert damit man überhaupt etwas hat. Besser als nichts 🤷

rd3 19. Dez 2018 09:17

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
Hallo,

o.GetValue('strasse').Value;

sollte gehen. ToString ist hier nicht für gedacht.

exasoft 19. Dez 2018 12:16

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
mich hat nur gewundert, dass es im Video-Beispiel eben genau so funktioniert hatte :-(

Schokohase 19. Dez 2018 14:32

AW: TJSONObject.GetValue liefert immer Werte in doppelten Hochkommas
 
Zitat:

Zitat von exasoft (Beitrag 1421243)
mich hat nur gewundert, dass es im Video-Beispiel eben genau so funktioniert hatte :-(

Sag doch mal die Minute:Sekunde wo das in dem Video zu sehen ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz