本文目录一览:
- 如何将json的数据转化成csv的数据格式
- C# 怎么将json 转换成 datatable
- java中把json怎么转换成数组?
- 请教如何将以下的json格式转为DataTable
- 如何将json数据转化为数据库文件
- 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
主要包含两个方法:
- 获取的DataTable 对象 转换为Json 字符串
- 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.