uni-app App 端分段導出 JSON 數據為文件

在開發過程中,我們經常需要將大量數據導出為 JSON 文件,尤其是在處理長列表或大數據集時。然而,直接將所有數據寫入一個文件可能會導致性能問題,尤其是在移動設備上。為了優化性能并提高用戶體驗,我們可以將數據分段導出到多個文件中。

實現思路

  1. 分段處理數據:將長 JSON 數據分段,每段包含固定數量的數據。

  2. 使用 plus.io 寫入文件:利用 uni-app 的 plus.io API,將每段數據寫入單獨的文件。

  3. 提示用戶導出成功:在導出完成后,提示用戶文件保存路徑。

代碼實現

1. 定義導出方法

在組件中定義一個方法 handleExport,用于分段導出數據。

const handleExport = (annoList) => {console.log("開始分段導出數據");isLoadingPage.value = true;loadingPageText.value = "導出中...";const chunkSize = 10; // 每組10個數據const totalChunks = Math.ceil(annoList.length / chunkSize); // 總組數// 使用 plus.io 寫入文件plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS, (fs) => {fs.root.getDirectory("文件_exports", { create: true }, (dirEntry) => {// 創建一個目錄用于存儲所有 JSON 文件let currentChunk = 0;const writeChunk = () => {if (currentChunk >= totalChunks) {isLoadingPage.value = false;uni.showToast({title: `導出成功,路徑:${dirEntry.fullPath}`,icon: "none",});return;}const start = currentChunk * chunkSize;const end = start + chunkSize;const chunkData = annoList.slice(start, end); // 獲取當前分段數據const jsonString = JSON.stringify(chunkData, null, 2); // 格式化為 JSON 字符串const fileName = `data_chunk_${currentChunk + 1}.json`; // 文件名:data_chunk_1.json, data_chunk_2.json, ...dirEntry.getFile(fileName, { create: true }, (fileEntry) => {fileEntry.createWriter((writer) => {writer.onwrite = () => {console.log(`文件 ${fileName} 導出成功`);currentChunk++;writeChunk(); // 寫入下一個分段};writer.write(jsonString); // 寫入當前分段數據});});};writeChunk(); // 開始寫入});});
};
2. 調用導出方法

調用 handleExport 方法,例如在按鈕點擊事件中觸發。

3. 清空文件

定義一個清空文件夾的方法。

const clearDirectory = async (dirName) => {try {// 獲取文件系統plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS,(fs) => {// 獲取目標文件夾fs.root.getDirectory(dirName,{ create: false },(dirEntry) => {console.log(`目錄 ${dirName} 已獲取成功`);// 創建目錄閱讀器const reader = dirEntry.createReader();// 讀取目錄中的所有條目reader.readEntries((entries) => {// 遞歸刪除所有條目const deleteEntry = (entry) => {if (entry.isFile) {entry.remove(() => {console.log(`文件 ${entry.name} 已刪除`);},(error) => {console.error(`刪除文件 ${entry.name} 時出錯:`, error);});} else if (entry.isDirectory) {entry.removeRecursively(() => {console.log(`目錄 ${entry.name} 已刪除`);},(error) => {console.error(`刪除目錄 ${entry.name} 時出錯:`, error);});}};// 遍歷并刪除所有條目entries.forEach(deleteEntry);// 檢查是否所有條目都已刪除const checkDirectory = () => {reader.readEntries((remainingEntries) => {if (remainingEntries.length === 0) {console.log(`目錄 ${dirName} 已清空`);} else {remainingEntries.forEach(deleteEntry);checkDirectory(); // 遞歸檢查}});};checkDirectory(); // 開始檢查},(error) => {console.error(`讀取目錄 ${dirName} 時出錯:`, error);});},(error) => {console.error(`獲取目錄 ${dirName} 時出錯:`, error);});},(error) => {console.error(`請求文件系統時出錯:`, error);});} catch (error) {console.error(`清空目錄時出錯:`, error);}
};
4. 調用清空方法

調用 handleExport 方法,例如在按鈕點擊事件中觸發。

 clearDirectory("文件_exports");

注意事項

  1. 文件權限:確保應用已申請文件讀寫權限,否則可能會導致文件寫入失敗。

  2. 文件路徑:文件將保存到設備的公共下載目錄下的 文件_exports 文件夾中,用戶可以通過文件管理器訪問。

  3. 性能優化:分段寫入文件可以避免因數據量過大導致的性能問題,同時提高用戶體驗。

總結

通過上述方法,可以將長 JSON 數據分段導出到多個文件中,避免單個文件過大導致的性能問題。這種方法特別適用于處理大量數據,同時確保應用的性能和用戶體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73430.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73430.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73430.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

視頻推拉流EasyDSS案例分析:互聯網直播/點播技術與平臺創新應用

隨著互聯網技術的快速發展,直播/點播平臺已成為信息傳播和娛樂的重要載體。特別是在電視購物領域,互聯網直播/點播平臺與技術的應用,不僅為用戶帶來了全新的購物體驗,也為商家提供了更廣闊的營銷渠道。傳統媒體再一次切實感受到了…

MySQL再次基礎 向初級工程師邁進

作者:在計算機行業找不到工作的大四失業者 Run run run ! ! ! 1、MySQL概述 1.1數據庫相關概念 1.2MySQL數據庫 2、SQL 2.1SQL通用語法 SQL語句可以單行或多行書寫,以分號結尾。SQL語句可以使用空格/縮進來增強語句的可讀性。MySQL數據庫的SQL語句不區…

手寫一個簡易版的tomcat

Tomcat 是一個廣泛使用的開源 Servlet 容器,用于運行 Java Web 應用程序。深入理解 Tomcat 的工作原理對于 Java 開發者來說是非常有價值的。本文將帶領大家手動實現一個簡易版的 Tomcat,通過這個過程,我們可以更清晰地了解 Tomcat 是如何處理…

VSTO(C#)Excel開發8:打包發布安裝卸載

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github:codetoys,所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C的,可以在任何平臺上使用。 源碼指引:github源…

如何逐步迭代衍生出一個網絡安全產品

逐步迭代衍生出一個網絡安全產品需要結合市場需求、技術趨勢和用戶反饋,通過系統化的開發和優化過程來實現。以下是逐步迭代的詳細步驟: 1. 確定市場需求和產品定位 市場調研:分析當前網絡安全市場的痛點和趨勢,如云安全、零信任、…

uni-app打包h5并部署到nginx,路由模式history

uni-app打包有些坑,當時運行的基礎路徑填寫了./,導致在二級頁面刷新之后,頁面直接空白。就只能換一個路徑了,nginx也要跟著改,下面是具體步驟。 manifest.json配置web 運行路徑寫/h5/,或者寫你們網站的目…

Ceph(1):分布式存儲技術簡介

1 分布式存儲技術簡介 1.1 分布式存儲系統的特性 (1)可擴展 分布式存儲系統可以擴展到幾百臺甚至幾千臺的集群規模,而且隨著集群規模的增長,系統整體性能表現為線性增長。分布式存儲的水平擴展有以下幾個特性: 節點…

Linux驅動開發實戰(五):Qt應用程序點RGB燈(保姆級快速入門!)

Linux驅動開發實戰(五):Qt應用程序點RGB燈(保姆級快速入門!) 文章目錄 Linux驅動開發實戰(五):Qt應用程序點RGB燈(保姆級快速入門!)前…

Docker安裝Kafka(內含zookeeper)

因為kafka是基于zookeeper做的,所以必須要有zookeeper 一、Zookeeper 1.拉取鏡像 docker pull zookeeper:3.7.02.運行 docker run --restartalways \--log-driver json-file \--log-opt max-size100m \--log-opt max-file2 \--name zookeeper -p 2181:2181 \-v…

芯谷D8563TS實時時鐘/日歷芯片詳解可替代PCF8563

概述 芯谷D8563TS是一款低功耗CMOS實時時鐘/日歷芯片,廣泛應用于移動電話、便攜式儀器、傳真機和電池供電產品等領域。該芯片通過兩線雙向IC總線進行數據傳輸,最大總線速度為400 kbits/s。D8563TS內置了自動遞增的字地址寄存器,支持多種功能…

【一次成功】Win10本地化單機部署k8s v1.31.2版本及可視化看板

【一次成功】Win10本地化單機部署k8s v1.31.2版本及可視化看板 零、安裝清單一、安裝Docker Desktop軟件1.1 安裝前<啟用或關閉Windows功能> 中的描紅的三項1.2 查看軟件版本1.3 配置Docker鏡像 二、更新裝Docker Desktop三、安裝 k8s3.1 點擊啟動安裝3.2 查看狀態3.3 查…

MoonSharp 文檔五

目錄 13.Coroutines&#xff08;協程&#xff09; Lua中的協程 從CLR代碼中的協程 從CLR代碼中的協程作為CLR迭代器 注意事項 搶占式協程 14.Hardwire descriptors&#xff08;硬編碼描述符&#xff09; 為什么需要“硬編碼” 什么是“硬編碼” 如何進行硬編碼 硬編…

【初級篇】如何使用DeepSeek和Dify構建高效的企業級智能客服系統

在當今數字化時代,企業面臨著日益增長的客戶服務需求。使用Dify創建智能客服不僅能夠提升客戶體驗,還能顯著提高企業的運營效率。關于DIfy的安裝部署,大家可以參考之前的文章: 【入門級篇】Dify安裝+DeepSeek模型配置保姆級教程_mindie dify deepseek-CSDN博客 AI智能客服…

【網絡編程】HTTP網絡編程

13.1 HTTP 簡介 HTTP(Hyper Text Transfer Protocol,超文本傳輸協議)是用于從萬維網(WWW:World Wide Web) 服務器(簡稱Web 服務器)傳輸超文本到本地瀏覽器的傳送協議&#xff0c;基于TCP/IP 通信協 議來傳遞數據 (HTML 文件、圖片文件、查詢結果等)。 13.2 HTTP 的工作原理 …

用Scrum敏捷的視角看《哪吒2》的創作

去年我們公司邀請Scrum中文網的老師培訓了敏捷開發課程&#xff0c;讓我對敏捷有了更深入的理解。前陣子我參加了scrum中文網的一個直播&#xff0c;老師分享了敏捷在個人領域或生活其他領域的應用&#xff0c;很有意思。因為我學習敏捷&#xff0c;除了應用到本身軟件研發的工…

Docker+Flask 實戰:打造高并發微服務架構

DockerFlask 實戰&#xff1a;打造高并發微服務架構 今天我們要深入探討一個非常熱門且實用的主題&#xff1a;基于 Docker 部署 Python Flask 應用。Docker 作為當下最流行的容器化技術&#xff0c;已經廣泛應用于各種開發和部署場景&#xff0c;尤其是在微服務架構中。而 Fl…

Linux find 命令完全指南

find 是 Linux 系統最強大的文件搜索工具&#xff0c;支持 嵌套遍歷、條件篩選、執行動作。以下通過場景分類解析核心用法&#xff0c;涵蓋高效搜索、文件管理及高級技巧&#xff1a; 一、基礎搜索模式 1. 按文件名搜索&#xff08;精確/模糊匹配&#xff09; <BASH> f…

【量化策略】趨勢跟蹤策略

【量化策略】趨勢跟蹤策略 &#x1f680;量化軟件開通 &#x1f680;量化實戰教程 技術背景與應用場景 在金融市場中&#xff0c;趨勢跟蹤策略是一種基于市場趨勢進行交易的量化投資方法。該策略的核心思想是“順勢而為”&#xff0c;即認為市場價格會沿著一定的方向持續移…

AI自動化、資本短視、三輸與破局

當前AI應用中的一個深層矛盾&#xff1a;工程師使用AI將很專業的任務變成小白可以操作的工作&#xff0c;然后資本方給小白很少的錢把工程師裁掉了&#xff0c;然而小白不懂底層&#xff0c;出問題幾乎無法修復。由此&#xff0c;技術普及與專業能力之間的斷層引發了"三輸…

Python數據分析之數據可視化

Python 數據分析重點知識點 本系列不同其他的知識點講解&#xff0c;力求通過例子讓新同學學習用法&#xff0c;幫助老同學快速回憶知識點 可視化系列&#xff1a; Python基礎數據分析工具數據處理與分析數據可視化機器學習基礎 四、數據可視化 圖表類型與選擇 根據數據特…