Download JSON object as a file from browser
This is how I solved it for my application:
HTML: <a id="downloadAnchorElem" style="display:none"></a>
JS (pure JS, not jQuery here):
var dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(storageObj));var dlAnchorElem = document.getElementById('downloadAnchorElem');dlAnchorElem.setAttribute("href", dataStr );dlAnchorElem.setAttribute("download", "scene.json");dlAnchorElem.click();
In this case, storageObj
is the js object you want to store, and "scene.json" is just an example name for the resulting file.
This approach has the following advantages over other proposed ones:
- No HTML element needs to be clicked
- Result will be named as you want it
- no jQuery needed
I needed this behavior without explicit clicking since I want to trigger the download automatically at some point from js.
JS solution (no HTML required):
function downloadObjectAsJson(exportObj, exportName){ var dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(exportObj)); var downloadAnchorNode = document.createElement('a'); downloadAnchorNode.setAttribute("href", dataStr); downloadAnchorNode.setAttribute("download", exportName + ".json"); document.body.appendChild(downloadAnchorNode); // required for firefox downloadAnchorNode.click(); downloadAnchorNode.remove(); }
Found an answer.
var obj = {a: 123, b: "4 5 6"};var data = "text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(obj));$('<a href="data:' + data + '" download="data.json">download JSON</a>').appendTo('#container');
seems to work fine for me.
** All credit goes to @cowboy-ben-alman, who is the author of the code above **
You could try using:
- the native JavaScript API's Blob constructor and
- the FileSaver.js
saveAs()
method
No need to deal with any HTML elements at all.
var data = { key: 'value'};var fileName = 'myData.json';// Create a blob of the datavar fileToSave = new Blob([JSON.stringify(data)], { type: 'application/json'});// Save the filesaveAs(fileToSave, fileName);
If you wanted to pretty print the JSON, per this answer, you could use:
JSON.stringify(data,undefined,2)