var
  i: integer;
  JSONArray: TJSONArray;
  JSONObj: TJSONObject;
  Field: TField;
  StrList: TStringList;
begin
    JSONArray := TJSONArray.Create;
      FDquery1.First;
      while not FDquery1.Eof do
      begin
        JSONObj := TJSONObject.Create;
        for I := 0 to FDquery1.FieldCount - 1 do
        begin
          Field := FDquery1.Fields[I];
          // 根据字段类型转换
          case Field.DataType of
            ftInteger, ftSmallint, ftAutoInc:
              JSONObj.AddPair(Field.FieldName, TJSONNumber.Create(Field.AsInteger));
            ftLargeint:
              JSONObj.AddPair(Field.FieldName, TJSONNumber.Create(Field.AsLargeInt));
            ftFloat, ftCurrency:
              JSONObj.AddPair(Field.FieldName, TJSONNumber.Create(Field.AsFloat));
            ftBoolean:
              JSONObj.AddPair(Field.FieldName, TJSONBool.Create(Field.AsBoolean));
            ftBlob, ftMemo, ftGraphic:
              JSONObj.AddPair(Field.FieldName, Field.AsString); // 或用 Base64
          else
            if Field.IsNull then
              JSONObj.AddPair(Field.FieldName, TJSONNull.Create)
            else
              JSONObj.AddPair(Field.FieldName, Field.AsString);
          end;
        end;
        JSONArray.AddElement(JSONObj);
        FDquery1.Next;
      end;

         // 写入文件
      StrList := TStringList.Create;
        StrList.Text := JSONArray.Format(2); // 2 = 缩进
        StrList.Text:='{'+StrList.Text+'}';//前后  大括号
        StrList.SaveToFile('eee.json', TEncoding.UTF8);
        StrList.Free;
      JSONArray.Free;
  showmessage('导出为eee.json');
end;