AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TJSONValue und Dezimalzahlen

Ein Thema von Codehunter · begonnen am 13. Jul 2018 · letzter Beitrag vom 17. Jul 2018
Antwort Antwort
Der schöne Günther

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

AW: TJSONValue und Dezimalzahlen

  Alt 16. Jul 2018, 09:24
So ungefähr?

Delphi-Quellcode:
type
   TJsonObjectHelper = class helper for System.JSON.TJSONObject
      function FindPair(const PairName: String): TJSONPair;
   end;

procedure p();
const
   input = '{"key": 123.400}';
var
   jsonObject: TJSONObject;
   jsonPair: TJSONPair;
begin
   jsonObject := TJsonObject.ParseJSONValue(input) as TJSONObject;
   try
      jsonPair := jsonObject.FindPair('key');
      WriteLn( jsonPair.JsonValue.ToString() ); // Ergibt "123.400"
   finally
      jsonObject.Destroy();
   end;
end;

{ TJsonObjectHelper }

function TJsonObjectHelper.FindPair(const PairName: String): TJSONPair;
var
  Candidate: TJSONPair;
  I: Integer;
begin
  for I := 0 to Count - 1 do
  begin
   Candidate := TJSONPair(self.FMembers[I]);
   if (Candidate.JsonString.Value = PairName) then
   begin
     Exit(Candidate);
   end;
  end;
  Result := nil;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#2

AW: TJSONValue und Dezimalzahlen

  Alt 16. Jul 2018, 09:30
Warum liest du das dann nicht einfach als Zahl (Float) aus und konvertierst selber?

Ansonsten geht es halt über die globalen FormatStettings.
Lösung: Stell dein Windows auf englisch um und schon hast du deine 123.4
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#3

AW: TJSONValue und Dezimalzahlen

  Alt 17. Jul 2018, 07:05
Warum liest du das dann nicht einfach als Zahl (Float) aus und konvertierst selber?
Dass die Anforderung überhaupt besteht ergibt sich aus der verqueren Schnittstellenspezifikation. Mehrere Felder haben kontextabhängig unterschiedliche Anzahl Dezimalstellen und bei Antworten bestehen sie auch auf ebensolche, selbst wenn 123.000000 zurückgegeben werden muss. FormatSettings kann ich also nicht hardcoded verwenden
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#4

AW: TJSONValue und Dezimalzahlen

  Alt 17. Jul 2018, 09:44
Wenn, dann müssen sie die Zahlen eben als String speichern und nicht als Float.
Alles andere wiederspricht grob fahrlässig der Spezifikation des JSON.

Wenn der Nummeric-Typ den Wert nunmal auch Nummerisch speichert, dann gehen beim Einlesen automatisch sämtliche Informationen über führende/folgende Nullen verloren.
Kein "ordentlicher" JSON-Parser/Konverter wird sowas ohne Informationsverlust einlesen und schon garnicht speichern können.
Fazit: Du mußt den ganzen JSON-String selbst parsen und behandeln.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (17. Jul 2018 um 09:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#5

AW: TJSONValue und Dezimalzahlen

  Alt 17. Jul 2018, 17:56
Alles andere wiederspricht grob fahrlässig der Spezifikation des JSON.
[...]
Fazit: Du mußt den ganzen JSON-String selbst parsen und behandeln.
Hehe, das gebe ich mal so an den Dienstanbieter weiter. Eigentlich sind die ganz umgänglich und haben schon Anpassungen auf meine Anfrage hin gemacht. Aber bei den Floats sind sie eigen. Dass man die Dezimalgenauigkeit an der Stringdarstellung festmacht, hatte ich so auch noch nicht ^^
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TJSONValue und Dezimalzahlen

  Alt 17. Jul 2018, 18:39
Zitat:
Hehe, das gebe ich mal so an den Dienstanbieter weiter. Eigentlich sind die ganz umgänglich und haben schon Anpassungen auf meine Anfrage hin gemacht. Aber bei den Floats sind sie eigen. Dass man die Dezimalgenauigkeit an der Stringdarstellung festmacht, hatte ich so auch noch nicht ^^
Schick Ihnen einreich einen Link zur RFC Sowas wie
https://tools.ietf.org/html/rfc7159
Fritz Westermann
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:28 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