Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Decoding von zusammengefügten JSON Objekten (https://www.delphipraxis.net/204880-decoding-von-zusammengefuegten-json-objekten.html)

bekrause 9. Jul 2020 11:25

Delphi-Version: 10.3 Rio

Decoding von zusammengefügten JSON Objekten
 
Hallo,

ich habe eine Funktion, die Daten aus JSON Dokumenten ausliest. Dies Dokuemnte werden über eine Webschnittstelle empfangen, an der ich nichts ändern kann.

Manchmal werden mehrere JSON Dokumente in einem Datenstream übermittelt:
Code:
{Daten JSON Dokument1}{Daten JSON Dokument 2}
Gibt es eine Funktion, die automatisch solchen hintereinandergefügten JSON Dokumente separieren kann? Im Momemt arbeite ich (mehr schlecht als recht) mit (recht umfangreichen) regulären Ausdrücken und die einzelnen JSON Dokumente aus dem String zu extrahieren. Aber das müsste doch einacher gehen.

Danke, Gruß Benno

Der schöne Günther 9. Jul 2020 11:37

AW: Decoding von zusammengefügten JSON Objekten
 
Ich würde vorne ein [ und hinten ein ] dranmachen,
Delphi-Quellcode:
}{
durch
Delphi-Quellcode:
}, {
ersetzen und es dann als Json-Array parsen 😂

bekrause 9. Jul 2020 15:35

AW: Decoding von zusammengefügten JSON Objekten
 
Hallo,

erstmal danke für Deine Antwort. Leider habe ich keinen Einfluß auf die Datenquelle. Ich kann Sie also nicht (bei der Erstellung) anpassen. Aber grundsätzlich ist es ja genau das Problem, die Stellen zu finden, in an denen die Klammern und das Komma gesetzt werden müssten.

Gruß Benno

bekrause 9. Jul 2020 15:36

AW: Decoding von zusammengefügten JSON Objekten
 
Beim zweiten Blick habe ich verstanden, was du meintest. Dann teste ich mal.

Danke

himitsu 9. Jul 2020 15:41

AW: Decoding von zusammengefügten JSON Objekten
 
Die Stellen zu finden ist "leicht.

Delphi-Quellcode:
}{
darf nicht vorkommen, also kannst es einfach überall ersetzen, mit'm Komma dazwischen.
Eventuell beim Suchen noch Leerzeichen und Zeilenumbrüche dazwischen beachten.

Einzig wo es vorkommen könnte, wäre in Strings, aber wenn'de das ausschließen kanns, dann stört das nicht.



Per se gäbe es auch JSON-Libs, welche z.B. einen TStream lesen, bis zum Ende eines Blocks.
Dann könnte man anschließend ab da den nächsten Block lesen.
Aber jetzt mit den vorhandenen Hausmitteln ist die andere Idee schon handlicher.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 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