Search code examples
javascriptjsonvue.jsreadfile

How get data from JSON file by readfile in Vue?


I can't read of JSON file content, I tried to access the contents of the file by ReadFile but I did not success, I get string empty for content and url is undefined,

My Code:

<template>
 <div class="large-12 medium-12 small-12 cell">
   <input type="file" accept="application/JSON" @change="onFileChange" class="inputFile" />
 </div>
</template>

<script>
import Vue from "vue";

export default {
 data() {
   return {};
 },
 methods: {
   onFileChange(e) {
     let files = e.target.files || e.dataTransfer.files;
     if (!files.length) return;
     this.readFile(files[0]);
   },
   readFile(file) {
     let reader = new FileReader();
     reader.onload = e => {
       this.readContentFile = e.target.result;
       console.log(this.readFile);
     };
     let url = reader.readAsDataURL(file);
     let content =reader.result;
     console.log(url);
     console.log(content);
   }
 }
};
</script>

Solution

  • You almost had it. reader.onload is like a callback for when file has finished loading, so your console.logs near the bottom would happen before the file has loaded. Hopefully you should find this snippet helpful.

    new Vue ({
     el: "#app",
     methods: {
       onFileChange(e) {
         let files = e.target.files || e.dataTransfer.files;
         if (!files.length) return;
         this.readFile(files[0]);
       },
       readFile(file) {
         let reader = new FileReader();
         reader.onload = e => {
           console.log(e.target.result);
           let json = JSON.parse(e.target.result);
         };
         reader.readAsText(file);
       }
     }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    <div class="large-12 medium-12 small-12 cell" id="app">
       <input type="file" accept="application/json" @change="onFileChange">
    </div>