json转clientdataset,json转clientdataset类型

发布时间:2022-11-23

本文目录一览:

  1. 如何将json的数据转化成csv的数据格式
  2. C# 怎么将json 转换成 datatable
  3. java中把json怎么转换成数组?
  4. 请教如何将以下的json格式转为DataTable
  5. 如何将json数据转化为数据库文件
  6. xe2下TClientDataSet与Json怎么互转

如何将json的数据转化成csv的数据格式

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Twiknight
链接:
来源:知乎
json不能直接转化为csv,因为它们根本不是存同一类东西的。 json的本质是字典,是hash表,用来存储非结构化的数据。
csv本质是表,用来存储结构化数据(虽然实际上你存什么没人管)。 想把json转成csv,核心问题只有一个: 如何把非结构化的数据处理成结构化的 这个问题解决起来有最简单的思路有两个:

  • 配置。让程序决定json里的非结构化数据应该如何处理。
  • 约定。规定json按照某种格式来写。 这两种方式各有适用的场景。配置的思路适用于自己不能控制json内容的情况,但是工作繁杂;约定处理起来简单,但是不能对付未知内容的json。 Twiknight/csv_generator · GitHub 这是一个简单的使用约定的方式处理Json的小工具,但是我猜这不是你想要的那种。 话说简洁里面写着“计算机”的人来问这种问题真的合适吗? Github上面有关csv和json转换的小工具几个月之前就有好几面了。

C# 怎么将json 转换成 datatable

主要包含两个方法:

  1. 获取的DataTable 对象 转换为Json 字符串
  2. Json 字符串 转换为 DataTable数据集合
#region DataTable 转换为Json字符串实例方法
/// <summary>
/// GetClassTypeJosn 的摘要说明
/// </summary>
public class GetClassTypeJosn : IHttpHandler
{
    /// <summary>
    /// 文件名:DataTable 和Json 字符串互转
    /// 版权所有:Copyright (C) Create Family Wealth liangjw
    /// 创建标示:2013-08-03
    /// </summary>
    //用法说明实例
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "application/json";
        context.Response.Charset = "utf-8";
        HttpRequest req = context.Request;
        string method = req["method"].ToStr().ToLower();
        //获取合同明细列表 DataTable 转换为Json字符串
        if (method == "txtdate")
        {
            string json = "";
            BO.MakeContractMx bll = new MakeContractMx();
            DataSet ds = bll.GetDataTable();
            if (ds.Tables.Count > 0)
            {
                json = ToJson(ds.Tables[0]);
            }
            context.Response.Write(json);
            return;
        }
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
#endregion
#region Json字符串转换为DataTable 实例方法
public DataTable JsonToDataTable(string json)
{
    DataTable dt = ToDataTable(json);
    return dt;
}
#endregion
#region DataTable 转换为Json 字符串
/// <summary>
/// DataTable 对象 转换为Json 字符串
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string ToJson(this DataTable dt)
{
    JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
    javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
    ArrayList arrayList = new ArrayList();
    foreach (DataRow dataRow in dt.Rows)
    {
        Dictionary<string, object> dictionary = new Dictionary<string, object>(); //实例化一个参数集合
        foreach (DataColumn dataColumn in dt.Columns)
        {
            dictionary.Add(dataColumn.ColumnName, dataRow[dataColumn.ColumnName].ToStr());
        }
        arrayList.Add(dictionary); //ArrayList集合中添加键值
    }
    return javaScriptSerializer.Serialize(arrayList); //返回一个json字符串
}
#endregion
#region Json 字符串 转换为 DataTable数据集合
/// <summary>
/// Json 字符串 转换为 DataTable数据集合
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static DataTable ToDataTable(this string json)
{
    DataTable dataTable = new DataTable(); //实例化
    DataTable result;
    try
    {
        JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
        javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
        ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
        if (arrayList.Count > 0)
        {
            foreach (Dictionary<string, object> dictionary in arrayList)
            {
                if (dictionary.Keys.Count == 0)
                {
                    result = dataTable;
                    return result;
                }
                if (dataTable.Columns.Count == 0)
                {
                    foreach (string current in dictionary.Keys)
                    {
                        dataTable.Columns.Add(current, dictionary[current].GetType());
                    }
                }
                DataRow dataRow = dataTable.NewRow();
                foreach (string current in dictionary.Keys)
                {
                    dataRow[current] = dictionary[current];
                }
                dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
            }
        }
    }
    catch
    {
    }
    result = dataTable;
    return result;
}
#endregion
#region 转换为string字符串类型
/// <summary>
/// 转换为string字符串类型
/// </summary>
/// <param name="s">获取需要转换的值</param>
/// <param name="format">需要格式化的位数</param>
/// <returns>返回一个新的字符串</returns>
public static string ToStr(this object s, string format = "")
{
    string result = "";
    try
    {
        if (format == "")
        {
            result = s.ToString();
        }
        else
        {
            result = string.Format("{0:" + format + "}", s);
        }
    }
    catch
    {
    }
    return result;
}
#endregion

java中把json怎么转换成数组?

使用原生的解析:

String json = "...";
//遍历数组里的值,得到每个独立的对象,然后获取对应的值设置到声明好的对象中,最终创建对象完成后添加到集合中,如我自己代码里的片段:
for (int j = 0; j < array.length(); j++) {
    obj = array.getJSONObject(j);
    Data data = new Data();
    mDataList.add(data);
}

数组声明 在数组的声明格式里,“数据类型”是声明数组元素的数据类型,可以是java语言中任意的数据类型,包括简单类型和结构类型。“数组名”是用来统一这些相同数据类型的名称,其命名规则和变量的命名规则相同。 数组声明之后,接下来便是要分配数组所需要的内存,这时必须用运算符new,其中“个数”是告诉编译器,所声明的数组要存放多少个元素,所以new运算符是通知编译器根据括号里的个数,在内存中分配一块空间供该数组使用。利用new运算符为数组元素分配内存空间的方式称为动态分配方式。 以上内容参考:百度百科-数组

请教如何将以下的json格式转为DataTable

#region Json 字符串 转换为 DataTable数据集合
/// <summary>
/// Json 字符串 转换为 DataTable数据集合
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static DataTable ToDataTable(this string json)
{
    DataTable dataTable = new DataTable(); //实例化
    DataTable result;
    try
    {
        JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
        javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
        ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
        if (arrayList.Count > 0)
        {
            foreach (Dictionary<string, object> dictionary in arrayList)
            {
                if (dictionary.Keys.Count == 0)
                {
                    result = dataTable;
                    return result;
                }
                if (dataTable.Columns.Count == 0)
                {
                    foreach (string current in dictionary.Keys)
                    {
                        dataTable.Columns.Add(current, dictionary[current].GetType());
                    }
                }
                DataRow dataRow = dataTable.NewRow();
                foreach (string current in dictionary.Keys)
                {
                    dataRow[current] = dictionary[current];
                }
                dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
            }
        }
    }
    catch
    {
    }
    result = dataTable;
    return result;
}
#endregion

如何将json数据转化为数据库文件

从json数组中得到java数组,可以对该数组进行转化,如将JSONArray转化为String型、Long型、Double型、Integer型、Date型等等。 分别采用jsonArray下的getString(index)、getLong(index)、getDouble(index)、getInt(index)等方法。 同样,如果要获取java数组中的元素,只需要遍历该数组。 Java代码 收藏代码

/**
 * 将json数组转化为Long型
 * @param str
 * @return
 */
public static Long[] getJsonToLongArray(String str) {
    JSONArray jsonArray = JSONArray.fromObject(str);
    Long[] arr = new Long[jsonArray.size()];
    for (int i = 0; i < jsonArray.size(); i++) {
        arr[i] = jsonArray.getLong(i);
        System.out.println(arr[i]);
    }
    return arr;
}
/**
 * 将json数组转化为String型
 * @param str
 * @return
 */
public static String[] getJsonToStringArray(String str) {
    JSONArray jsonArray = JSONArray.fromObject(str);
    String[] arr = new String[jsonArray.size()];
    for (int i = 0; i < jsonArray.size(); i++) {
        arr[i] = jsonArray.getString(i);
        System.out.println(arr[i]);
    }
    return arr;
}
/**
 * 将json数组转化为Double型
 * @param str
 * @return
 */
public static Double[] getJsonToDoubleArray(String str) {
    JSONArray jsonArray = JSONArray.fromObject(str);
    Double[] arr = new Double[jsonArray.size()];
    for (int i = 0; i < jsonArray.size(); i++) {
        arr[i] = jsonArray.getDouble(i);
    }
    return arr;
}
/**
 * 将json数组转化为Date型
 * @param str
 * @return
 */
public static Date[] getJsonToDateArray(String jsonString) {
    JSONArray jsonArray = JSONArray.fromObject(jsonString);
    Date[] dateArray = new Date[jsonArray.size()];
    String dateString;
    Date date;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    for (int i = 0; i < jsonArray.size(); i++) {
        dateString = jsonArray.getString(i);
        try {
            date = sdf.parse(dateString);
            dateArray[i] = date;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return dateArray;
}
public static void main(String[] args) {
    JSONArray jsonLongs = new JSONArray();
    jsonLongs.add(0, "111");
    jsonLongs.add(1, "222.25");
    jsonLongs.add(2, new Long(333));
    jsonLongs.add(3, 444);
    Long[] log = getJsonToLongArray(jsonLongs.toString());
    for (int i = 0; i < log.length; i++) {
        System.out.println(log[i]);
    }
    JSONArray jsonStrs = new JSONArray();
    jsonStrs.add(0, "2011-01-01");
    jsonStrs.add(1, "2011-01-03");
    jsonStrs.add(2, "2011-01-04 11:11:11");
    Date[] d = getJsonToDateArray(jsonStrs.toString());
    for (int i = 0; i < d.length; i++) {
        System.out.println(d[i]);
    }
}
/*结果如下:
* 111
* 222
* 333
* 444
*
* Sat Jan 01 00:00:00 CST 2011
* Mon Jan 03 00:00:00 CST 2011
* Tue Jan 04 00:00:00 CST 2011
*/

xe2下TClientDataSet与Json怎么互转

unit uJSONDB;
interface
uses
  SysUtils, Classes, Variants, DB, DBClient, SuperObject, Dialogs;
type
  TJSONDB = class
  private
    class function getJsonFieldNames(res: ISuperObject): TStringList;
    class function getJsonFieldValues(res: ISuperObject): TStringList;
  public
    class procedure JsonToClientDataSet(jsonArr: TSuperArray; dstCDS: TClientDataSet);
    class function ClientDataSetToJSON(srcCDS: TClientDataSet): UTF8String;
  end;
implementation
function GetToken(var astring: string; const fmt: array of char): string;
var
  i, j: integer;
  Found: Boolean;
begin
  found := false;
  result := '';
  aString := TrimLeft(aString);
  if length(astring) = 0 then
    exit;
  I := 1;
  while I <= length(Astring) do
  begin
    found := false;
    if aString[i] = #128 then
    begin
      for j := Low(Fmt) to High(Fmt) do
      begin
        if (astring[i] <> Fmt[j]) then
          continue;
        found := true;
        break;
      end;
      if Not found then
        I := I + 1;
    end
    else
      I := I + 2;
    if found then
      break;
  end;
  if found then
  begin
    result := copy(astring, 1, i - 1);
    delete(astring, 1, i);
  end
  else
  begin
    result := astring;
    astring := '';
  end;
end;
function GetFieldParams(PropName, Source: string): string;
var
  S1, S2: string;
  TmpParam: string;
  AChar: string;
  aValue, aPropName, aSource: string;
begin
  Result := '';
  if Source = '' then
    Exit;
  aSource := Source;
  while aSource <> '' do
  begin
    aValue := GetToken(aSource, [',']);
    aPropName := GetToken(aValue, [':']);
    if CompareText(PropName, aPropName) <> 0 then
      continue;
    Result := aValue;
    break;
  end;
end;
//从json取得字段名称
class function TJSONDB.getJsonFieldNames(res: ISuperObject): TStringList;
var
  i: Integer;
  fieldList: TStringList;
  fieldNames: String;
begin
  try
    fieldList := TStringList.Create;
    fieldNames := res.AsObject.getNames.AsString;
    fieldNames := StringReplace(fieldNames, '[', '', [rfReplaceAll, rfIgnoreCase]);
    fieldNames := StringReplace(fieldNames, ']', '', [rfReplaceAll, rfIgnoreCase]);
    fieldNames := StringReplace(fieldNames, '"', '', [rfReplaceAll, rfIgnoreCase]);
    fieldList.Delimiter := ',';
    fieldList.DelimitedText := fieldNames;
    Result := fieldList;
  finally
    //fieldList.Free;
  end;
end;
//从json取得字段值
class function TJSONDB.getJsonFieldValues(res: ISuperObject): TStringList;
var
  i: Integer;
  fieldList: TStringList;
  fieldValues: String;
begin
  try
    fieldList := TStringList.Create;
    fieldValues := res.AsObject.getValues.AsString;
    fieldValues := StringReplace(fieldValues, '[', '', [rfReplaceAll, rfIgnoreCase]);
    fieldValues := StringReplace(fieldValues, ']', '', [rfReplaceAll, rfIgnoreCase]);
    fieldValues := StringReplace(fieldValues, '"', '', [rfReplaceAll, rfIgnoreCase]);
    fieldList.Delimiter := ',';
    fieldList.DelimitedText := fieldValues;
    Result := fieldList;
  finally
    //fieldList.Free;
  end;
end;
//json转CDS
class procedure TJSONDB.JsonToClientDataSet(jsonArr: TSuperArray; dstCDS: TClientDataSet);
var
  fieldList: TStringList;
  valuesList: TStringList;
  jsonSrc: string;
  i, j: Integer;
begin
  fieldList := getJsonFieldNames(SO[jsonArr[0].AsJson(False, False)]);
  if (dstCDS.FieldCount = 0) then
  begin
    for i := 0 to fieldList.Count - 1 do
    begin
      dstCDS.FieldDefs.Add(fieldList[i], ftString, 100, False);
    end;
    dstCDS.CreateDataSet;
    dstCDS.Close;
    dstCDS.Open;
  end;
  try
    dstCDS.DisableControls;
    for i := 0 to jsonArr.Length - 1 do
    begin
      jsonSrc := SO[jsonArr[i].AsJson(False, False)].AsString;
      jsonSrc := StringReplace(jsonSrc, '[', '', [rfReplaceAll, rfIgnoreCase]);
      jsonSrc := StringReplace(jsonSrc, ']', '', [rfReplaceAll, rfIgnoreCase]);
      jsonSrc := StringReplace(jsonSrc, '"', '', [rfReplaceAll, rfIgnoreCase]);
      jsonSrc := StringReplace(jsonSrc, '{', '', [rfReplaceAll, rfIgnoreCase]);
      jsonSrc := StringReplace(jsonSrc, '}', '', [rfReplaceAll, rfIgnoreCase]);
      dstCDS.Append;
      for j := 0 to fieldList.Count - 1 do
      begin
        dstCDS.FieldByName(fieldList[j]).AsString := GetFieldParams(fieldList[j], jsonSrc);
      end;
      dstCDS.Post;
    end;
  finally
    dstCDS.EnableControls;
  end;
end;
class function TJSONDB.ClientDataSetToJSON(srcCDS: TClientDataSet): UTF8String;
var
  i, j: Integer;
  keyValue: String;
  jsonList: TStringList;
  jsonResult: String;
begin
  if not srcCDS.Active then
    srcCDS.Open;
  try
    jsonList := TStringList.Create;
    srcCDS.DisableControls;
    srcCDS.First;
    while not srcCDS.Eof do
    begin
      keyValue := '';
      for i := 0 to srcCDS.FieldDefs.Count - 1 do
      begin
        keyValue := keyValue + Format('"%s":"%s",', [srcCDS.Fields[i].FieldName, srcCDS.Fields[i].AsString]);
      end;
      jsonList.Add(Format('{%s}', [Copy(keyValue, 0, Length(keyValue) - 1)]));
      srcCDS.Next;
    end;
    for i := 0 to jsonList.Count - 1 do
    begin
      jsonResult := jsonResult + jsonList[i] + ',';
    end;
    Result := Utf8Encode(Format('[%s]', [Copy(jsonResult, 0, Length(jsonResult) - 1)]));
  finally
    srcCDS.EnableControls;
    jsonList.Free;
  end;
end;
end.