Delphi SuperObject を使用して Json を使用した私の経験を共有してください
アイデアは、クエリ結果をjson形式に簡単に変換する方法です。
文字列を使用して、すべてのデータ形式 (BLOB、DATE、DATETIME を含む) を表します。将来的には、json ファイルをデータベースに簡単にインポートできます。
私はゼロからコードを書くのではなく、自分のニーズに合わせて少し変更を加えただけです
コードは次のとおりです。
関数 TTableJSon.CreateJsonValueByFieldMySql(Json: ISuperObject; フィールド: TField): ブール値。 変数 JsonTyp、FieldTyp : 文字列; tmpStr : 文字列; 始める 結果:=偽; フィールドが TDateField の場合、開始 Json.O[Field.FieldName] := SO('"'+FormatDateTime('yyyy-mm-dd',Field.AsDateTime)+'"') end else if Field Is TDateTimeField then begin Json.O[Field.FieldName] := SO('"'+FormatDateTime('yyyy-mm-dd hh:nn:ss',Field.AsDateTime)+'"') フィールドが TMemoField の場合は終了し、開始します Json.S[Field.FieldName] := EncodeString(Field.AsString) フィールドが TBlobField の場合は終了し、開始します Json.S[Field.FieldName] := EncodeString(Field.AsString) フィールドが TFloatField の場合は終了し、開始する Json.O[フィールド.フィールド名] := SO(ReplaceStr(フィールド.AsString,',','.')) 終了するか開始する Json.O[フィールド.フィールド名] := SO(フィールド.値); 終わり; 結果:=真; 終わり; 関数 TTableJSon.JSonFromDataSet(DataSet: TDataSet): 文字列; プロシージャ GetFieldTypeInfo(Field:TField;var Fieldtyp,JsonTyp:string); 始める Fieldtyp := GetEnumName(TypeInfo(TFieldType),ord(Field.DataType)); 削除 (Fieldtyp,1,2); Field が TStringField の場合 JsonTyp := '文字列' フィールドが TDateTimeField の場合 JsonTyp := '整数' フィールドが TMemoField の場合 JsonTyp := 'メモ' フィールドが TBlobField の場合 JsonTyp := 'ブロブ' それ以外の場合 (フィールドが TIntegerField) または (フィールドが TLargeintField) の場合 JsonTyp := '整数' フィールドが TCurrencyField の場合 JsonTyp := '通貨' フィールドが TNumericField の場合 JsonTyp := 'ダブル' それ以外の場合、Field が TBooleanField の場合 JsonTyp := 'ブール値' そうしないと JsonTyp := 'バリアント'; 終わり; 変数 sj、aj、sj2:ISuperObject; i:整数; Fieldtyp、JsonTyp:文字列; リスト:TStringList; 始める sj := SO(); aj := SA([]); リスト:= TStringList.Create; 試す List.Sorted := True; for i := 0 to DataSet.FieldCount - 1 do 始める sj2 := SO(); GetFieldTypeInfo(DataSet.Fields[i],Fieldtyp,JsonTyp); sj2.S[cstFieldName] := DataSet.Fields[i].FieldName; sj2.S[cstFieldType] := Fieldtyp; sj2.S[cstJsonType]:= JsonTyp; sj2.I[cstFieldSize]:= DataSet.Fields[i].Size; sj2.B[cstRequired] := DataSet.Fields[i].Required; sj2.I[cstFieldIndex]:= DataSet.Fields[i].Index; aj.AsArray.Add(sj2); List.Add(DataSet.Fields[i].FieldName+'='+JsonTyp); 終わり; sj.O['Cols'] := aj; DataSet.DisableControls; DataSet.First; aj := SA([]); while not DataSet.Eof do 始める sj2 := SO(); for i := 0 to DataSet.FieldCount - 1 do 始める if VarIsNull(DataSet.Fields[i].Value) then sj2.O[DataSet.Fields[i].FieldName] := SO(ヌル) そうでなければ始める CreateJsonValueByFieldMySql(sj2,DataSet.Fields[i]); 終わり; 終わり; aj.AsArray.Add(sj2); DataSet.Next; 終わり; sj.O['データ'] := aj; 結果:= sj.AsString; 最後に List.Free; DataSet.EnableControls; 終わり; 終わり;