Biz kullanabilirsiniz URL özellikle api URL.createObjectURL () ve Blob hemen her şeyi kodlamak ve indirmek için api .
İndirmeniz küçükse, bu iyi çalışır:
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 = ""
İndirme işleminiz çok büyükse, DOM kullanmak yerine daha iyi bir yol, indirme parametreleriyle bir bağlantı öğesi oluşturmak ve bir tıklamayı tetiklemektir.
Bağlantı öğesinin belgeye eklenmediğine, ancak tıklamanın yine de işe yaradığına dikkat edin! Bu, yüzlerce Mo'nın bu şekilde indirilmesini sağlamak mümkündür.
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>
Bonus! Herhangi bir döngüsel nesneyi indirin , hatalardan kaçının:
TypeError: döngüsel nesne değeri (Firefox) TypeError: Dönüştürme
JSON (Chrome ve Opera) TypeError: Dairesel şeklinde dairesel yapı
değer bağımsız değişkenindeki başvuru desteklenmiyor (Edge)
Https://github.com/douglascrockford/JSON-js/blob/master/cycle.js kullanma
Bu örnekte, document
nesneyi json olarak indirme .
/* 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()