![]() |
LkJSON 2. "Datensatz" lesen
Hallo,
ich habe folgende Daten (nur ein ausschnitt der ersten beiden)
Code:
Ich kann die id,url usw. vom 1. Datensatz auslesen. Aber ich finde nicht heraus wie ich an die nächsten "Datensätze" komme. Wäre toll wenn mir da jemand, eventuell mit einem 3-Zeiler, helfen könnte. Ich nutze LkJSON v1.07. Dort sind zwar 5 Samples bei, aber leider nichts was mir helfen würde.
{
"id":"0.0.127.in-addr.arpa.", "url":"/servers/localhost/zones/0.0.127.in-addr.arpa.", "name":"0.0.127.in-addr.arpa", "kind":"Master", "dnssec":false, "masters":[ ], "serial":00000, "notified_serial":000000, "last_check":0 }, { "id":"0000.in-addr.arpa.", "url":"/servers/localhost/zones/0000.in-addr.arpa.", "name":"0000.in-addr.arpa", "kind":"Master", "dnssec":false, "masters":[ ], "serial":00000, "notified_serial":0000, "last_check":0 }, usw... Vielen dank im Voraus EDIT: Wenn ich du wenig angaben gemacht habe, einfach fragen. Vielen Dank. |
AW: LkJSON 2. "Datensatz" lesen
Damit sich keiner die mühe macht und sucht. Ich habe etwas gefunden. Mein JSON sieht nun so aus.
Code:
Neu sind die [] am Anfang und ende. Dann kann ich das mit diesem Programm auslesen.
[{
"id":"0.0.127.in-addr.arpa.", "url":"/servers/localhost/zones/0.0.127.in-addr.arpa.", "name":"0.0.127.in-addr.arpa", "kind":"Master", "dnssec":false, "masters":[ ], "serial":32513, "notified_serial":000000, "last_check":0 }, { "id":"0000.in-addr.arpa.", "url":"/servers/localhost/zones/0000.in-addr.arpa.", "name":"0000.in-addr.arpa", "kind":"Master", "dnssec":false, "masters":[ ], "serial":32513, "notified_serial":0000, "last_check":0 }]
Delphi-Quellcode:
Gefunden habe ich das
program sample6;
{$APPTYPE CONSOLE} uses SysUtils, windows, classes, Variants, uLkJSON in 'uLkJSON.pas'; var Messages :TlkJSONbase; i :Integer; begin messages:=TlkJSONstreamed.loadfromfile('test1.txt') as TlkJSONbase; for I := 0 to messages.Count-1 do begin WriteLn(VarToStr(messages.Child[I].Field['url'].Value)); end; readln; end. ![]() Ich kam am anfang mit dem Child nicht klar. Trotzdem danke an alle und noch einen schönen Ostermontag. Meiner ist gerettet :-D |
AW: LkJSON 2. "Datensatz" lesen
Moin,
Wollte nochmal kurz was zum Abschluss sagen, da ich gerade erst auf diesen Thread aufmerksam geworden bin. Ein JSON-Document darf nur ein Root haben. Du hast aber auf der ersten Ebene mehrere Objekte, ergo musst du(wie du es bereits selbst richtig korrigiert hast) daraus eine Array-Deklaration machen "[...]". Desweiteren sind einige deiner Numerischen Werte nicht strikt Json-kompatibel. Die Zahlen dürfen afaik keine führenden Nullen haben. Deine Serials aber haben 00000, stehen dürfte da aber nur 0. Oder wenn du die Zeichenkette so brauchst, musst du es als String hinschreiben. Folgende JSon-Validatoren kann ich zu Analyse- und validierungszwecken empfehlen: ![]() ![]() Grüße Memnarh |
AW: LkJSON 2. "Datensatz" lesen
Danke für den Hinweis. Die Nullen habe ich nur rein geschrieben um nicht alle Daten ins Internet zu stellen.
|
AW: LkJSON 2. "Datensatz" lesen
Hi zusammen.
Da ich recht neu im Umgang mit JSON bin, bin ich hier auf lkJSON gestossen. Gibt es hierfür irgendwo ein paar Demozeilen, die den Umgang hiermit besser erläutern? Habe mit den Demos1-5 angefangen, leider ist es nicht sehr selbsterklärend. :stupid: Bei den Demozeilen oben
Code:
ist mir aufgefallen, dass die Childs genau bekannt sein müssen, sonst schmeisst es Zugriffsverletzungen aus. Muss ich jeden Zugriff auf Fields mit try..except abfangen, oder kann man das in der lkJSON.pas aktivieren?
WriteLn(VarToStr(js.Child[I].Field['customerName'].Value));
Danke für Infos Michael |
AW: LkJSON 2. "Datensatz" lesen
Ich rate mal:
Delphi-Quellcode:
if Assigned(js.Child[I].Field['customerName']) then begin
WriteLn(VarToStr(js.Child[I].Field['customerName'].Value)); end; |
AW: LkJSON 2. "Datensatz" lesen
Hi,
ich habe es mit try..except gelöst. |
AW: LkJSON 2. "Datensatz" lesen
Ich habe es mit Assigned probiert und es funktioniert (hätte man eigentlich selbst drauf kommen können :stupid:)
Danke erstmal Michael |
AW: LkJSON 2. "Datensatz" lesen
In diesem Fall war das Stichwort "Zugriffsverletzung bei Adresse 000000xx" -> nil.
Und bei Konsolenanwendungen kann ein
Delphi-Quellcode:
nicht schaden.
Try ... Except WriteLn(E.ClassName, ': ', E.Message); ExitCode := 1;
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 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