9:20 PM 10/30/2018
This seems to work well on IE.10, Firefox.63 and Chrome.69... but actually, this page only covers loading and saving "the text string" of JSON.
JSON as object isn't covered here. If you need to work with JSON object then you may need to further parse
loaded string with
JSON.parse()
<div id="test"> <textarea></textarea> <input type="file" accept="application/json"> <br> <button type="button">Load</button> <a href="#" download="test.json"></a> <button type="button">Save</button> </div>
#test input[type="file"]{ width: 1px; height: 1px; position: absolute; z-index: -1; overflow: hidden; } #test a[download]{ position: absolute; z-index: -1; }
var hTest = document.getElementById('test'), hText = hTest.getElementsByTagName('textarea')[0], hLoad = hTest.querySelector('input[type="file"]'), hSave = hTest.querySelector('a[download]'); //install click event handler on load from file button hLoad.nextElementSibling.addEventListener('click', function(){ hLoad.click(); }, false); //install change even handler on load from input hLoad.addEventListener('change', function(){ var reader = new FileReader(); reader.addEventListener('load', function(){ hText.value = this.result; //else convert loaded string into JSON object here with JSON.parse() and work it out further }, false); reader.readAsText(this.files[0]); }, false); //install click event handler on save to file button hSave.nextElementSibling.addEventListener('click', function(){ /*pass your JSON object JSON.stringify() and use this function return value to replace "hText.value" phrase in following line.*/ var blob = new Blob([hText.value], {type : 'applicatioin/json'}); if(navigator.msSaveBlob) window.navigator.msSaveBlob(blob, hSave.getAttribute('download')); else{ var saveURL = URL.createObjectURL(blob); if(hSave.href.search('#') === -1) URL.revokeObjectURL(hSave.href); hSave.href = saveURL; hSave.click(); } }, false);
Comments