javascript - 如何通过 File API 执行 json 文件中的数据?

标签 javascript json html drag-and-drop fileapi

我是文件 API 新手。目前我有一个任务是使用文件 API 和拖放方法执行 json 文件中的数据。 JSON 文件示例:

[
    {
        "id":2,
        "name":"VoffCafe",
        "coordinates":{
            "latitude":56.629418,
            "longitude":47.893927
        }
    }
]

来自 JSON 文件的数据必须写入某些变量。

现在我有一个例子,它是我的任务示例,但它显示了图片,该图片被拖放到网页上。此示例中的脚本执行此操作,如下所示:

<script>
  var holder = document.getElementById('holder'),
  state = document.getElementById('status');

  if (typeof window.FileReader === 'undefined') {
  state.className = 'fail';
  } else {
  state.className = 'success';
  state.innerHTML = 'File API & FileReader available';
  }

  holder.ondragover = function () { this.className = 'hover'; return false; };
  holder.ondragend = function () { this.className = ''; return false; };
  holder.ondrop = function (e) {
  this.className = '';
  e.preventDefault();

  var file = e.dataTransfer.files[0],
  reader = new FileReader();
  reader.onload = function (event) {
  console.log(event.target);
  holder.style.background = 'url(' + event.target.result + ') no-repeat center';
  };
  console.log(file);
  reader.readAsDataURL(file);

  return false;
  };
</script>

完整页面示例,此脚本的工作位置如下:http://html5demos.com/file-api

如何重做这个脚本以满足我的要求?

最佳答案

您可以将“本地 JSON 文件抓取器”的任务分解为 3 个主要步骤:

1:文件选择器

在此示例中,ondrop 事件充当我们的文件选择器。 see documentation here

var holder = document.getElementById('holder');

   holder.ondrop = function (e) { 
   var file = e.dataTransfer.files[0]; //Gets the most recent dropped file 
   ...do FileReader stuff...
   return false; 
   }  

2:文件读取器

Javascript 的 Filereader 由于其异步特性经常让人们感到困惑。长话短说 : 在下面的代码中,reader.onload 函数在 reader.readAsText() 完成后调用。 see documentation here

var reader = new FileReader();
//.onload event is triggered each time the reading operation is successfully completed.
reader.onload = function (event) {
 ...do Parser stuff... 
}
reader.readAsText(file);//Passes reader the file to read as text (aka String) 

<强>3。解析器

一旦有了要解析的字符串,使用 JSON.parse() 将其转换为对象就非常简单了。 在此示例中,只需使用 event.target.result 传入文件内容。

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

把它们放在一起

//JSON file (removed unnecessary brakets)  
{
    "id":2,
    "name":"VoffCafe",
    "coordinates":{
        "latitude":56.629418,
        "longitude":47.893927
    }
}

//HTML file
<script>
var holder = document.getElementById('holder'); 

/*
...Other stuff...
*/

//Step 1 : The File Selector
holder.ondrop = function (e) {
    this.className = '';
    e.preventDefault(); // Keeps any default action the element from happening

    var file = e.dataTransfer.files[0];
    console.log(file);


    //Step 2 : The File Reader    
    var reader = new FileReader();
    reader.onload = function (event) {

        //Step : 3 The Parser 
        var parsedObj = JSON.parse(event.target.result);

        //example code : alerts all the methods of parsedObj.
        for(I in parsedObj) {
            if(parsedObj.hasOwnProperty(I)){
                alert(parsedObj[I]);
            }
        }
    };

    reader.readAsText(file);
    return false;
};
</script>

希望有帮助!

关于javascript - 如何通过 File API 执行 json 文件中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962068/

相关文章:

javascript - 使用 d3.js 迭代多维数组

html - 是否尊重 CSS 宽度中的小数位?

html - 将 div 高度扩展到文档高度

javascript - ng-repeat 过滤器未应用

python - 合并并创建具有相同 id 的所有记录的新 JSON 数组

c# - Json.net:如何从 [WebMethod] 返回 JObject?

html - SSL 和混合内容以及 https 上的流式视频

php - 在 Node.js 中模仿 PHP 的 __get(), __set() & __call() 魔术方法

javascript - AngularJS:在保存到 Controller 之前从服务获取更新的数据

javascript - 使用 Phonegap 和 JavaScript 解码二维码