javascript - 从 HTML 文件输入中读取 JSON
问题描述
如果我有输入:
<input type="file" id="upload" onchange="getFile(this)">
我的用户将上传一个 JSON 文件(作为纯文本,所以我将不得不使用JSON.parse()
),我怎样才能获取这个文件并通过实际获取数据getFile()
在getFile(element)
中,我尝试过使用element.files[0]
,但似乎不包含实际数据。我也看过这里、这里和这里,但这些都不能解决我的问题。MDN 上的这个资源看起来很有希望,但我真的不明白。
我想要一个涉及URL.createObjectURL()
或的解决方案FileReader()
。
此外,在任何人在评论中发布此内容之前,我确实了解这些解决方案不适用于所有浏览器,我想从前端执行此操作。
解决方案
您可以利用Response构造函数并调用.json()
任何 blob/文件。
function getFile (elm) {
new Response(elm.files[0]).json().then(json => {
console.log(json)
}, err => {
// not json
})
}
使用 blob.prototype[...] 上的新读取方法的替代方法
new Blob(['1']).text().then(JSON.parse).then(console.log)
我猜对于较大的文件 response.json 可能会更快/更好,因为它可以在后台解析内容并且不会像 JSON.parse 那样阻塞主 UI
推荐阅读
- python - 如何在 Pandas DataFrame 中获取具有非零最小值的第一行索引?
- vba - 循环通过两个记录集时更新第三个表
- javascript - 白天每 15 分钟发送一次通知
- javascript - Firebase 函数在同一个 onCall 函数中读取和添加数据
- c# - 当通过单击按钮创建列表视图时,如何通过拖放在列表视图之间移动列表视图项?UWP C#
- wordpress - Wordpress 重定向到不存在的域
- node.js - 在我的电子应用中显示 Teams Web 应用
- numpy - numpy - 为什么 Z[(0,2)] 是视图但 Z[(0, 2), (0)] 是副本?
- c# - 如何在 VS 中用 C# 声明并用 C++ 实现?
- xamarin.forms - Xamarin.Forms AVPlayer 从方法中退出全屏