Vue.js - Write JSON object to local file Vue.js - Write JSON object to local file vue.js vue.js

Vue.js - Write JSON object to local file


There are 3 ways to do this.

  1. Write to local storage

  2. Create a Blob and invoke an event to download it

  3. Wrap it into a electron app and use node fs module to save file

I can show you a sample here for these 3 cases

index.html

<!DOCTYPE html><html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml"><head>    <meta charset="UTF-8">    <title>Vue test</title>    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"></script></head><body><div id="vue-app">    <form>        <input type="text" v-model="name"/>{{name}}<br/>        <input type="text" v-model="last"/>{{last}}<br/>        <input type="text" v-model="index"/>{{index}}<br/>        <select v-model="grade">            <option>5</option>            <option>6</option>            <option>7</option>            <option>8</option>            <option>9</option>            <option>10</option>        </select>        {{grade}}        <button type="button" v-on:click="add()">Add To Table</button>        <button type="button" v-on:click="saveFile()">saveFile</button>    </form>    <table border="1">        <thead><td>Name</td><td>Last Name</td><td>Index</td><td>Grade</td></thead>        <tbody>        <tr v-for="x in arr">            <td>{{x.first}}</td>            <td>{{x.lastn}}</td>            <td>{{x.index}}</td>            <td>{{x.grade}}</td>        </tr>        </tbody>    </table></div><script src="test.js"></script></body></html>

test.js (Write to local storage)

new Vue ({  el: '#vue-app',  data: {      name: '',      last: '',      index: 0,      grade: 0,      arr: []  },  methods: {      add: function (e) {          this.arr.push({first: this.name, lastn: this.last, index: this.index, grade: this.grade});          console.log(1);      },      saveFile: function() {        const data = JSON.stringify(this.arr)        window.localStorage.setItem('arr', data);        console.log(JSON.parse(window.localStorage.getItem('arr')))  }});

Create a Blob and invoke a event to download it

only change for saveFile func

saveFile: function() {    const data = JSON.stringify(this.arr)    const blob = new Blob([data], {type: 'text/plain'})    const e = document.createEvent('MouseEvents'),    a = document.createElement('a');    a.download = "test.json";    a.href = window.URL.createObjectURL(blob);    a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');    e.initEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);    a.dispatchEvent(e);}

Wrap it into an Electron app and use node fs module to save file

Change for saveFile func

saveFile: function() {    const data = JSON.stringify(this.arr)    const fs = require('fs');    try { fs.writeFileSync('myfile.txt', data, 'utf-8'); }    catch(e) { alert('Failed to save the file !'); }}

Then use Electron to wrap it

electron ./index.html


This is how I edit JSON files in my Vue projects. In this case, if you run the file, it will create a new data.json file and add Price to each JSON object:

const fs = require("fs");let cars = [  {    Name: "chevrolet chevelle malibu",    Miles_per_Gallon: 18,    Cylinders: 8,    Displacement: 307,    Horsepower: 130,    Weight_in_lbs: 3504,    Acceleration: 12,    Year: "1970-01-01",    Origin: "USA"  },  {    Name: "buick skylark 320",    Miles_per_Gallon: 15,    Cylinders: 8,    Displacement: 350,    Horsepower: 165,    Weight_in_lbs: 3693,    Acceleration: 11.5,    Year: "1970-01-01",    Origin: "USA"  }];cars.forEach(car => {  car.price = 12000;});let data = JSON.stringify(cars);fs.writeFileSync("data.json", data);