हम URL एपीआई का उपयोग कर सकते हैं , विशेष रूप से URL.createObjectURL () , और बहुत अधिक कुछ भी एनकोड और डाउनलोड करने के लिए बूँद एपीआई।
यदि आपका डाउनलोड छोटा है, तो यह ठीक काम करता है:
document.body.innerHTML +=
`<a id="download" download="PATTERN.json" href="${URL.createObjectURL(new Blob([JSON.stringify("HELLO WORLD", null, 2)]))}"> Click me</a>`
download.click()
download.outerHTML = ""
यदि आपका डाउनलोड बहुत बड़ा है, तो DOM का उपयोग करने के बजाय, डाउनलोड पैरामीटर के साथ लिंक तत्व बनाने के लिए एक बेहतर तरीका है, और एक क्लिक ट्रिगर करें।
ध्यान दें कि लिंक तत्व दस्तावेज में संलग्न नहीं है, लेकिन फिर भी काम पर क्लिक करें! इस तरह से कई सैकड़ों मो का डाउनलोड बनाना संभव है।
const stack = {
some: "stuffs",
alot: "of them!"
}
BUTTONDOWNLOAD.onclick = (function(){
let j = document.createElement("a")
j.id = "download"
j.download = "stack_"+Date.now()+".json"
j.href = URL.createObjectURL(new Blob([JSON.stringify(stack, null, 2)]))
j.click()
})
<button id="BUTTONDOWNLOAD">DOWNLOAD!</button>
बक्शीश! किसी भी चक्रीय वस्तुओं को डाउनलोड करें , त्रुटियों से बचें:
TypeError: चक्रीय वस्तु मान (फ़ायरफ़ॉक्स) TypeError: Converting
JSON (क्रोम और ओपेरा) टाइप संरचना: परिपत्र संरचना
मूल्य तर्क में संदर्भ समर्थित नहीं है (एज)
Https://github.com/douglascrockford/JSON-js/blob/master/cycle.js का उपयोग करना
इस उदाहरण पर, document
ऑब्जेक्ट को json के रूप में डाउनलोड करना ।
/* JSON.decycle */
if(typeof JSON.decycle!=="function"){JSON.decycle=function decycle(object,replacer){"use strict";var objects=new WeakMap();return(function derez(value,path){var old_path;var nu;if(replacer!==undefined){value=replacer(value)}
if(typeof value==="object"&&value!==null&&!(value instanceof Boolean)&&!(value instanceof Date)&&!(value instanceof Number)&&!(value instanceof RegExp)&&!(value instanceof String)){old_path=objects.get(value);if(old_path!==undefined){return{$ref:old_path}}
objects.set(value,path);if(Array.isArray(value)){nu=[];value.forEach(function(element,i){nu[i]=derez(element,path+"["+i+"]")})}else{nu={};Object.keys(value).forEach(function(name){nu[name]=derez(value[name],path+"["+JSON.stringify(name)+"]")})}
return nu}
return value}(object,"$"))}}
document.body.innerHTML +=
`<a id="download" download="PATTERN.json" href="${URL.createObjectURL(new Blob([JSON.stringify(JSON.decycle(document), null, 2)]))}"></a>`
download.click()