觸電JavaScript-如何將json 二維數組轉換爲 JSON object

最近由於項目中使用的是 ActiveReports .Net 產品,由於他們最近新出了  ActiveReports JS 版本,因此心裏有點癢癢,想試試這個純前端版本報表控件到底如何,畢竟咱們項目有一天也要從net 轉爲 js版本。html

可是奈何純前端的東西,json 是惟一通行的數據 DNA, 鄙人對 前端也是一竅不通啊,代碼是能夠看懂,但要真寫起來,可能每行都要Google 下。前端

這不剛試用了  ActiveReports js 就遇到難題了,她的數據類型僅支持 json, 但咱們原來的項目是 ActiveReports .net 開發的,都是鏈接的 DataTable 數據類型,我這邊又想急切使用,如何將數據庫的查詢結果轉換成 Json呢。sql

1. 使用 SQLITE 導出工具,導出JSON 

就想到一個妙招,爲什麼不將數據查詢的結果導出 json呢, 我用sqlite 的導出工具,將數據查詢導出 Json 文件,數據庫

 

 

 

 

 

 

 

 

導出json 數據完成後,我就火燒眉毛,打開  ActiveReports JS 的Electron Designer 去設計報表了。json

 

 

 

但奈何連接不成功,原來 數據庫導出的json,將個人全部行數據變成了 二維數組,格式以下。這就遇到了第二個難題數組

如何將 JSON 二維數組轉換爲 JSON 對象工具

才能被 ActiveReports JS 所識別。學習

 "rows": [ [ "2011", "01", 6, "鴨肉", 21, 99, 0, "肉\/家禽" ], [ "2011", "01", 1, "蜜桃汁", 35, 14.4, 0, "飲料" ], [ "2011", "01", 3, "薯條", 30, 16, 0, "點心" ], [ "2011", "01", 8, "黃魚", 18, 20.7, 0, "海鮮" ], [ "2011", "01", 5, "白米", 70, 30.4, 0, "穀類\/麥片" ], [ "2011", "01", 2, "海苔醬", 20, 16.8, 0, "調味品" ], [ "2011", "01", 4, "意大利奶酪", 60, 17.2, 0, "日用品" ], [ "2011", "01", 5, "燕麥", 60, 7.2, 0, "穀類\/麥片" ], [ "2011", "01", 2, "甜辣醬", 65, 35.1, 0, "調味品" ], [ "2011", "01", 3, "餅乾", 21, 13.9, 0.15, "點心" ], [ "2011", "01", 3, "玉米片", 70, 10.2, 0.15, "點心" ], [ "2011", "01", 3, "棉花糖", 30, 24.9, 0.05, "點心" ], [ "2011", "01", 5, "糙米", 40, 11.2, 0.05, "穀類\/麥片" ], [ "2011", "01", 3, "薯條", 30, 16, 0.05, "點心" ], [ "2011", "01", 2, "蕃茄醬", 50, 8, 0, "調味品" ],

 

我就各類查資料問同事,雖然代碼簡單邏輯清楚,但對於不懂 JS 的人,真是每行代碼都須要搜呀,寫出來還被同事嘲笑很菜。通過他的改良後確實順眼不少ui

我寫的,有些錯誤信息:spa

var obj=require("../Data/ARDemo.json") var pluginArrayArg = []; for (i  in obj.rows.length) { var jsonArg0 = {}; jsonArg0['O'] = rows[i][0]; jsonArg0['A'] = rows[i][1]; jsonArg0['B'] = rows[i][2]; jsonArg0['C'] = rows[i][3]; jsonArg0['D'] = rows[i][4]; pluginArrayArg.push(jsonArg0); } obj = JSON.stringify(pluginArrayArg)

 

 

 

 同事改良後的最終版本最正確的版本:

<html>
    <script> window.onload = function(){ var rows = json.rows; var columns = json.columns; var arrayData = []; for(var i = 0; i < rows.length; i++){ var data = {}; for(var j = 0; j < columns.length; j++){ data[columns[j].displayName] = rows[i][j]; } arrayData.push(data) } console.log(JSON.stringify(arrayData)) } var json = { "type": "query results", "query": "SELECT t.*, 類別.類別名稱 FROM (\nSELECT strftime('%Y',訂單.訂購日期) AS 訂購年, strftime('%m',訂單.訂購日期) AS 訂購月,類別.類別ID,產品.產品名稱,訂單明細.數量, 訂單明細.單價, 訂單明細.折扣 FROM (( 訂單 \n INNER JOIN 訂單明細 ON 訂單.訂單ID = 訂單明細.訂單ID)\n INNER JOIN 產品 ON 訂單明細.產品ID = 產品.產品ID)\n INNER JOIN 類別 ON 產品.類別ID = 類別.類別ID where strftime('%Y',訂單.訂購日期) = '2011' ) as t\n INNER JOIN 類別 ON t.類別ID = 類別.類別ID\n ORDER BY 訂購年,訂購月", "columns": [ { "displayName": "訂購年", "name": "strftime('%Y', 訂單.訂購日期)", "database": null, "table": null, "type": "" }, { "displayName": "訂購月", "name": "strftime('%m', 訂單.訂購日期)", "database": null, "table": null, "type": "" }, { "displayName": "類別ID", "name": "類別ID", "database": null, "table": "類別", "type": "" }, { "displayName": "產品名稱", "name": "產品名稱", "database": null, "table": "產品", "type": "" }, { "displayName": "數量", "name": "數量", "database": null, "table": "訂單明細", "type": "" }, { "displayName": "單價", "name": "單價", "database": null, "table": "訂單明細", "type": "" }, { "displayName": "折扣", "name": "折扣", "database": null, "table": "訂單明細", "type": "" }, { "displayName": "類別名稱", "name": "類別名稱", "database": null, "table": "類別", "type": "" } ], "rows": [ [ "2011", "01", 6, "鴨肉", 21, 99, 0, "肉\/家禽" ], [ "2011", "01", 1, "蜜桃汁", 35, 14.4, 0, "飲料" ], [ "2011", "01", 3, "薯條", 30, 16, 0, "點心" ], [ "2011", "01", 8, "黃魚", 18, 20.7, 0, "海鮮" ], ] } </script>
</html>

 

這樣數據成功以後,使用 ActiveReports JS Electron Designer 能夠直接打開 ActiveReports Net 的rdlx 報表格式,打開後修改數據源爲Json

 

使用 ActiveReports JS Electron Designer  打開 RDLX 報表

 

 

 

 

 

 

 

 

 

 

添加數據源

刪除舊的數據源,點擊添加數據源

 

能夠選擇內嵌JSON 數據,即將數據嵌入到報表中(設置是否內嵌爲 True),也能夠選擇打開文件

 

 

 

 

 

 

 

 

 添加數據源後,添加數據集

 

 

輸入JSON 的查詢語句 $.*

 

 

 

 

 

綁定數據成功後,就能夠預覽啦,嗖的一下一切正常,看來 ActiveReports NET 能夠順利遷移到  ActiveReports JS,只要處理好數據源,模板仍是能夠繼續複用的,能夠節省設計模板的時間了。

 

 

 

這就是個人第一次觸電 JavaScript ,前端的須要學習的東西還不少,我要開啓新一輪的學習嘍,會在這裏記下個人學習總結。加油

 

 

 

 

 

 

 

 

 

 

 

原文出處:https://www.cnblogs.com/lenkaguo/p/11640171.html

相關文章
相關標籤/搜索