Skip to content

file2Json / json2Blob / toBase64

file2Jsonjson2BlobtoBase64 三个函数用于在文件、Blob、字符串与 Base64 之间进行格式转换。

语法

javascript
file2Json(file)
json2Blob(jsonObject)
toBase64(str)

参数

file2Json

  • file File | Blob
    • 要读取的 File 或 Blob 对象。

json2Blob

  • jsonObject string
    • JSON 字符串,将被包装为 Blob 对象。

toBase64

  • str string
    • 需要编码为 Base64 的字符串。

返回值

  • file2Json Promise<string> - 返回文件内容的文本字符串。
  • json2Blob Blob - 返回包装后的 Blob 对象。
  • toBase64 string - 返回 Base64 编码后的字符串。

描述

file2Json 内部使用 FileReaderreadAsText 方法将 File/Blob 以文本形式读取,在 onload 回调中通过 Promise.resolve 返回结果。注意返回的是字符串,若需对象需自行 JSON.parse

json2Blob 通过 new Blob([jsonObject]) 将字符串包装为 Blob 对象,未指定 MIME 类型,默认为空字符串。若需要明确类型可在外部处理或后续扩展。

toBase64 先使用 encodeURI 对字符串进行 URI 编码(处理中文等非 ASCII 字符),再使用 btoa 转换为 Base64 字符串。这种先 encodeURIbtoa 的方式可避免中文等字符直接 btoa 时抛出 InvalidCharacterError

注意事项

  1. file2Json 返回的是字符串而非对象,若需 JSON 对象请使用 JSON.parse 转换,或直接使用 chooseJsonObj
  2. json2Blob 接收的是字符串而非对象,若直接传入对象会被 toString 转为 '[object Object]',请先 JSON.stringify
  3. toBase64 的解码需对应使用 decodeURIComponent(atob(base64)),否则直接 atob 会得到编码后的字符串。
  4. toBase64 依赖 btoa,仅支持 Latin1 字符,函数已通过 encodeURI 将非 ASCII 字符转为 %XX 形式以兼容中文。
  5. file2Json 仅监听 onload,未处理 onerror,若读取异常 Promise 不会 resolve,建议对异常文件提前校验。

示例

file2Json 读取文件为字符串

json2Blob 将字符串转为 Blob

toBase64 编码字符串

浏览器兼容性

  • 三个函数均依赖浏览器 API,只能在浏览器环境中使用。
  • file2Json 使用的 FileReader 在 IE10+ 及所有现代浏览器中可用。
  • json2Blob 使用的 Blob 构造函数在 IE10+ 及所有现代浏览器中可用。
  • toBase64 使用的 btoaencodeURI 为标准 API,在所有现代浏览器中可用。

性能考虑

  • 时间复杂度: json2BlobtoBase64 为 O(n),n 为输入字符串长度;file2Json 为异步操作,耗时取决于文件大小。
  • 大文件读取: file2Json 使用 readAsText 读取整个文件到内存,不适合读取超大文件,建议大文件分片处理。
  • toBase64encodeURIbtoa 均为同步操作,处理超长字符串可能阻塞主线程。

相关函数