本文目錄一覽:
- 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(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)
{
Dictionarystring, object dictionary = new Dictionarystring, 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.DeserializeArrayList(json);
if (arrayList.Count 0)
{
foreach (Dictionarystring, object dictionary in arrayList)
{
if (dictionary.Keys.Countstring() == 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.DeserializeArrayList(json);
if (arrayList.Count 0)
{
foreach (Dictionarystring, object dictionary in arrayList)
{
if (dictionary.Keys.Countstring() == 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;ijsonArray.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;ijsonArray.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;ijsonArray.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;ilog.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;id.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.
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/297871.html