使用JavaScript访问上传的JSON文件的数据

mas*_*oud 18 html javascript jquery json

我有一个像这样的HTML代码:

<input type="file" id="up" />
<input type="submit" id="btn" />
Run Code Online (Sandbox Code Playgroud)

我有一个像这样的JSON文件:

{
 "name": "John",
 "family": "Smith"
}
Run Code Online (Sandbox Code Playgroud)

还有一个简单的JavaScript函数:

alert_data(name, family)
{
     alert('Name : ' + name + ', Family : '+ family)
}
Run Code Online (Sandbox Code Playgroud)

现在我想alert_data()使用存储在使用我的HTML输入上传的JSON文件中的名称和系列来调用.

有没有办法使用HTML5文件阅读器或其他东西?
我没有使用服务器端编程,所有这些都是客户端.

Sam*_*lgh 25

您将需要一个HTML5浏览器,但这是可能的.

(function(){
    
    function onChange(event) {
        var reader = new FileReader();
        reader.onload = onReaderLoad;
        reader.readAsText(event.target.files[0]);
    }

    function onReaderLoad(event){
        console.log(event.target.result);
        var obj = JSON.parse(event.target.result);
        alert_data(obj.name, obj.family);
    }
    
    function alert_data(name, family){
        alert('Name : ' + name + ', Family : ' + family);
    }
 
    document.getElementById('file').addEventListener('change', onChange);

}());
Run Code Online (Sandbox Code Playgroud)
<input id="file" type="file" />

<p>Select a file with the following format.</p>
<pre>
{
  "name": "testName",
  "family": "testFamily"
}    
</pre>
Run Code Online (Sandbox Code Playgroud)

  • 截至 2019 年 11 月,工作正常。我被要求从 onUpload 的 json 文件中提取数据 (5认同)

leo*_*ess 21

由于所有答案似乎都不必要地复杂,因此这里有一个简单的异步函数,它将文件内容作为对象返回:

async function parseJsonFile(file) {
  return new Promise((resolve, reject) => {
    const fileReader = new FileReader()
    fileReader.onload = event => resolve(JSON.parse(event.target.result))
    fileReader.onerror = error => reject(error)
    fileReader.readAsText(file)
  })
}

const object = await parseJsonFile(file)
Run Code Online (Sandbox Code Playgroud)

  • 这是一个了不起的解决方案。只需在异步函数中使用它,它就会满足您的需要。谢谢@leonheess (2认同)

Sam*_*nce 6

这是对我有用的Sam Greenhalghs答案的速记版本。

$(document).on('change', '.file-upload-button', function(event) {
  var reader = new FileReader();

  reader.onload = function(event) {
    var jsonObj = JSON.parse(event.target.result);
    alert(jsonObj.name);
  }

  reader.readAsText(event.target.files[0]);
});
Run Code Online (Sandbox Code Playgroud)
<input class='file-upload-button' type="file" />
Run Code Online (Sandbox Code Playgroud)