【问题标题】:How to access data of uploaded JSON file?如何访问上传的 JSON 文件的数据?
【发布时间】:2014-06-14 05:12:45
【问题描述】:

我有一个这样的html代码:

<input type="file" id="up" />
<input type="submit" id="btn" />

我有一个这样的 JSON 文件:

{
 "name": "John",
 "family": "Smith"
}

还有一个简单的 JavaScript 函数:

alert_data(name, family)
{
     alert('Name : ' + name + ', Family : '+ family)
}

现在我想用我的 HTML 输入上传的 JSON 文件中存储的姓名和家庭来调用 alert_data()

有什么方法可以使用 HTML5 文件阅读器或其他东西吗?
我没有使用服务器端编程,它们都是客户端。

【问题讨论】:

  • @Howdy_McGee — Ajax 在这种情况下不会有帮助
  • @Manwal — JSON 文件来自客户端系统,它不在服务器上,因此没有 URL。
  • 查看here 了解返回对象的简单函数

标签: javascript html json


【解决方案1】:

您将需要一个 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);

}());
<input id="file" type="file" />

<p>Select a file with the following format.</p>
<pre>
{
  "name": "testName",
  "family": "testFamily"
}    
</pre>

【讨论】:

  • 截至 2019 年 11 月工作正常。我被要求从上传的 json 文件中提取数据
【解决方案2】:

这是对我有用的 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]);
});
&lt;input class='file-upload-button' type="file" /&gt;

【讨论】:

    【解决方案3】:

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

    async function fileToJSON(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)
      })
    }
    

    【讨论】:

      【解决方案4】:

      是的!它可以通过 HTML5 FileReader 完成。它实际上非常简单。
      将 json 保存为 .js 文件并在我的示例中加载它

      {
       "name": "John",
       "family": "Smith"
      }
      

      这就是神奇发生的地方:

      $("#up").change(function(event){
          var uploadedFile = event.target.files[0]; 
          
           if(uploadedFile.type !== "text/javascript" && uploadedFile.type !== "application/x-javascript") { 
              alert("Wrong file type == " + uploadedFile.type); 
              return false;
          }
          
          if (uploadedFile) {
              var readFile = new FileReader();
              readFile.onload = function(e) { 
                  var contents = e.target.result;
                  var json = JSON.parse(contents);
                  alert_data(json);
              };
              readFile.readAsText(uploadedFile);
          } else { 
              console.log("Failed to load file");
          }
      });
      
      function alert_data(json)
      {
           alert('Name : ' + json.name + ', Family : '+ json.family)
      }
      

      使用此代码的小提琴链接:http://jsfiddle.net/thomas_kingo/dfej7p3r/3/
      (uploadFile.type检查只在Chrome和firefox中测试过)

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 2017-08-30
      • 2019-05-24
      • 1970-01-01
      相关资源
      最近更新 更多