Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Json unbekanntes feld abfangen (https://www.delphipraxis.net/206370-json-unbekanntes-feld-abfangen.html)

venice2 15. Dez 2020 19:57

AW: Json unbekanntes feld abfangen
 
Kleines Test Projekt.
Versucht nur die *.json zu lesen. (Der Rest wurde kommentiert)

mytbo 15. Dez 2020 21:12

AW: Json unbekanntes feld abfangen
 
Wenn du es mit mORMot machen willst, dann hier ein kleines Beispiel. Hilfe zum Thema DocVariants findest du hier.
Eine ausführliche Hilfe zu mORMot findest du hier: Hilfe. Weitere Informationen findest du hier: Download, Forum
Delphi-Quellcode:
var
  iRun, nRun: Integer;
  doc: TDocVariantData;
  docChannels: PDocVariantData;
  docPrograms: PDocVariantData;
begin
  doc.InitJSONFromFile('EPG_data.json', JSON_OPTIONS_FAST_EXTENDED);
  if not doc.B['success'] then Exit; //=>

  for iRun := 0 to doc.A['channels'].Count - 1 do
  begin
    docChannels := doc.A['channels']._[iRun];
    ShowMessage(docChannels.S['cid']);

    for nRun := 0 to docChannels.A['programs'].Count - 1 do
    begin
      docPrograms := docChannels.A['programs']._[nRun];
      ShowMessage(docPrograms.S['i_url']);
      ShowMessage(docPrograms.I['e'].ToString);
      ShowMessage(docPrograms.A['g'].ToCSV);
    end;
  end;
Bis bald...
Thomas

venice2 15. Dez 2020 21:14

AW: Json unbekanntes feld abfangen
 
Zitat:

Zitat von mytbo (Beitrag 1479182)
Wenn du es mit mORMot machen willst, dann hier ein kleines Beispiel. Hilfe zum Thema DocVariants findest du hier.
Eine ausführliche Hilfe zu mORMot findest du hier: Hilfe. Weitere Informationen findest du hier: Download, Forum
Delphi-Quellcode:
var
  iRun, nRun: Integer;
  doc: TDocVariantData;
  docChannels: PDocVariantData;
  docPrograms: PDocVariantData;
begin
  doc.InitJSONFromFile('EPG_data.json', JSON_OPTIONS_FAST_EXTENDED);
  if not doc.B['success'] then Exit; //=>

  for iRun := 0 to doc.A['channels'].Count - 1 do
  begin
    docChannels := doc.A['channels']._[iRun];
    ShowMessage(docChannels.S['cid']);

    for nRun := 0 to docChannels.A['programs'].Count - 1 do
    begin
      docPrograms := docChannels.A['programs']._[nRun];
      ShowMessage(docPrograms.S['i_url']);
      ShowMessage(docPrograms.I['e'].ToString);
      ShowMessage(docPrograms.A['g'].ToCSV);
    end;
  end;
Bis bald...
Thomas

Und damit funktioniert es?
Wie ich schon sagte mit meiner nicht.

EDIT:
Denke nicht das ich das mache alleine die SynCommons.pas ist 3x mal so groß wie meine EXE selbst.
Wenn es mit meiner Json nicht geht dann lasse ich es muss nicht unbedingt EPG Daten haben.

mytbo 15. Dez 2020 21:25

AW: Json unbekanntes feld abfangen
 
Ja! mORMot verwendet JSON sehr intensiv. DocVariants sind nur eine Variante mit JSON komfortabel zu arbeiten. Früher habe ich auch SuperObject verwendet. Seit es mORMot gibt, nie mehr etwas anderes.

Bis bald...
Thomas

venice2 15. Dez 2020 21:26

AW: Json unbekanntes feld abfangen
 
Zitat:

Zitat von mytbo (Beitrag 1479185)
Ja! mORMot verwendet JSON sehr intensiv. DocVariants sind nur eine Variante mit JSON komfortabel zu arbeiten. Früher habe ich auch SuperObject verwendet. Seit es mORMot gibt, nie mehr etwas anderes.

Bis bald...
Thomas

Danke.. aber macht keinen sinn warum habe ich als EDIT angefügt.

mytbo 15. Dez 2020 21:37

AW: Json unbekanntes feld abfangen
 
Macht im fertigen Programm ca. 280 MB aus. Dafür ist man in 10 Minuten fertig.

Bis bald...
Thomas

venice2 15. Dez 2020 21:37

AW: Json unbekanntes feld abfangen
 
Zitat:

Zitat von mytbo (Beitrag 1479188)
Macht im fertigen Programm ca. 280 MB aus. Dafür ist man in 10 Minuten fertig.

Bis bald...
Thomas

Boahh.. 280 MB großartig ;)

mytbo 15. Dez 2020 21:43

AW: Json unbekanntes feld abfangen
 
Zitat:

Zitat von venice2 (Beitrag 1479189)
Boahh.. 280 MB großartig ;)

Ok, ich hätte vielleicht genauer schreiben sollen: ...ca. 280 MB mehr mit der Unit SynCommons.pas.

Frohe Weihnachten...
Thomas

himitsu 15. Dez 2020 21:58

AW: Json unbekanntes feld abfangen
 
Ohne die meisten Debuginfos (Release) wird es kleiner.

Alternativ kannst du auch mit "externen Debuginfos" kompilieren.

venice2 15. Dez 2020 22:07

AW: Json unbekanntes feld abfangen
 
Zitat:

Zitat von himitsu (Beitrag 1479193)
Ohne die meisten Debuginfos (Release) wird es kleiner.

Alternativ kannst du auch mit "externen Debuginfos" kompilieren.

Es war ein Witz :)
Er hat geschrieben 280 MB sollte wohl 280 KB sein.

Habe es mal versucht, es funktioniert auch nicht richtig oder ich mache was falsch.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  iRun, i, nRun: Integer;
  doc: TDocVariantData;
  docChannelGroup: PDocVariantData;
  docChannels: PDocVariantData;
begin
  doc.InitJSONFromFile('Channels_data.json', JSON_OPTIONS_FAST_EXTENDED);
  if not doc.B['success'] then
    Exit; //=>

  for iRun := 0 to doc.A['channel_groups'].Count - 1 do
  begin
    docChannelGroup := doc.A['channel_groups']._[iRun];
    for nRun := 0 to docChannelGroup.A['channels'].Count - 1 do
    begin
      docChannels := docChannelGroup.A['channels']._[nRun];
      for i := 0 to docChannels.A['channels'].Count - 1 do
      begin
        setLength(gChannels, i + 1);

        gChannels[i].display_alias := docChannels.S['display_alias'];
        gChannels[i].sharing := docChannels.B['sharing'];
        gChannels[i].is_radio := docChannels.B['is_radio'];
        gChannels[i].title := docChannels.S['title'];
        gChannels[i].cid := docChannels.S['cid'];
        gChannels[i].number := docChannels.I['number'];
        gChannels[i].recording := docChannels.B['recording'];
      end;
    end;
  end;
end;
erzählt mir irgendwas von
docChannels.A['channels'].Count wäre 0. ist es aber definitiv nicht.

Ich habe 172 Sender.

Habe die Channels_data.json mal angehängt.

EDIT:
Ok. Das problem ist wohl eher das ich nach dem Eintrag 'display_alias' suchen muss. Dieser hat 172 Einträge.
Wie komme ich daran?

Scheint nicht schlecht zu sein das Teil. @mytbo Danke.
Wenn auch etwas sehr mächtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 Uhr.
Seite 2 von 4     12 34      

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