Is there possible to save JSON data into local text file? So later i can use it again using by load that file and get the stored JSON data back. Actually want i really want
Is there possible to save JSON data into local text file?
Yes. Currently JavaScript at linked jsfiddle creates a .txt file, not a valid JSON file.
You can use try..catch..finally and JSON.parse() to check if input at element is valid JSON. If .value of is valid JSON create Blob URL using Blob or File constructor with MIME type property set to "application/json". and URL.createObjectURL(), else notify user that input is invalid JSON.
(function () {
let file, url, reader = new FileReader;
function createJSONFile(json) {
let e = void 0;
try {
JSON.parse(json)
} catch (err) {
e = err;
code.textContent = e;
}
finally {
if (e) {
code.classList.add("invalid");
return "Invalid JSON";
}
else {
code.classList.remove("invalid");
file = new File([json], "info.json", {type:"application/json"});
url = URL.createObjectURL(file);
return url;
}
}
};
function revokeBlobURL() {
window.removeEventListener("focus", revokeBlobURL);
URL.revokeObjectURL(url);
if (file.close) {
file.close();
}
}
function readJSON(e) {
reader.readAsText(input.files[0]);
}
let create = document.getElementById("create"),
textbox = document.getElementById("textbox"),
code = document.querySelector("code"),
input = document.querySelector("input[type=file]"),
pre = document.querySelector("pre");
create.addEventListener("click", function () {
var link = document.createElement("a");
link.setAttribute("download", "info.json");
var json = createJSONFile(textbox.value);
if (json !== "Invalid JSON") {
link.href = json;
document.body.appendChild(link);
code.textContent = "Valid JSON";
link.click();
window.addEventListener("focus", revokeBlobURL);
} else {
code.textContext = json;
}
}, false);
reader.addEventListener("load", function() {
pre.textContent = JSON.stringify(reader.result, null, 2);
});
input.addEventListener("change", readJSON);
})();
code {
display:block;
width: 350px;
height: 28px;
border: 1px dotted green;
padding: 4px;
margin: 4px;
color: green;
}
.invalid {
border: 1px dotted red;
color: red;
}
pre {
background: #eee;
width: 350px;
height: 350px;
border: 1px solid darkorange;
}