AGB  ·  Datenschutz  ·  Impressum  







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

JSON -> Database -> Auswertung ?

Ein Thema von bernhard_LA · begonnen am 1. Mai 2022 · letzter Beitrag vom 8. Mai 2022
 
mytbo

Registriert seit: 8. Jan 2007
481 Beiträge
 
#10

AW: JSON -> Database -> Auswertung ?

  Alt 6. Mai 2022, 17:14
Eine dynamische Ermittlung alle Namen aus dem JSON File wäre besser (flexibler) für mich.
Die Funktion ist mit mORMot umgesetzt und nicht optimiert. Solange keine Millionen Datenobjekte vorliegen, sollte es schnell genug sein. Dafür lässt es sich sehr schnell umsetzen. Es werden folgende JSON Varianten verarbeitet: {"Value": "value1"} und [{"Value": "value1"},{"Value": "value2"}].
Delphi-Quellcode:
uses
  mormot.core.base,
  mormot.core.data,
  mormot.core.text,
  mormot.core.json,
  mormot.core.unicode,
  mormot.core.variants,
  mormot.core.os;

procedure GetFieldNames(const pmcData: Variant; pmpFieldNames: PRawUtf8DynArray; const pmcFilterFields: array of RawUtf8);
var
  i: Integer;
  run: PDocVariantData;
  fieldName: RawUtf8;
begin
  SetLength(pmpFieldNames^, 0);
  case _Safe(pmcData)^.Kind of
    dvObject:
      run := _Safe(pmcData);
    dvArray:
      run := _Safe(TDocVariantData(pmcData).Value[0]);
  else
    Exit; //=> dvUndefined
  end;

  for i := 0 to High(run.Names) do
  begin
    fieldName := run.Names[i];
    if FindPropName(pmcFilterFields, fieldName) < 0 then
      AddRawUtf8(pmpFieldNames^, fieldName, True, False);
  end;
end;

var
  i, n: Integer;
  value: Variant;
  jsonData: Variant;
  jsonDataCount: Integer;
  fieldNames: TRawUtf8DynArray;
begin
  if not TDocVariantData(jsonData).InitJsonFromFile('JsonData.json', JSON_OPTIONS_FAST_EXTENDED) then Exit; //=>

  GetFieldNames(jsonData, @fieldNames, ['DasWillIchNicht']);
  if Length(fieldNames) = 0 then Exit; //=>

  if TDocVariantData(jsonData).Kind = dvArray then
    jsonDataCount := TDocVariantData(jsonData).Count
  else
    jsonDataCount := 1;

  for i := 0 to jsonDataCount - 1 do
  begin
    for n := 0 to High(fieldNames) do
    begin
      if jsonDataCount = 1 then
        value := TDocVariantData(jsonData).Value[fieldNames[n]]
      else
        value := _Safe(TDocVariantData(jsonData)[i])^.Value[fieldNames[n]];

      WriteLn(value);
    end;
  end;
end;
Bis bald...
Thomas
  Mit Zitat antworten Zitat
 


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 11:19 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