de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
Eugene Yu
Eugene Yu
Question

Download objek JSON sebagai file dari browser

Saya punya kode berikut untuk membiarkan pengguna men-download data string dalam file csv.

exportData = 'data:text/csv;charset=utf-8,';
exportData += 'some csv strings';
encodedUri = encodeURI(exportData);
newWindow = window.open(encodedUri);

Ia bekerja dengan baik bahwa jika klien menjalankan kode ini menghasilkan halaman kosong dan mulai men-download data dalam file csv.

Jadi saya mencoba untuk melakukan hal ini dengan objek JSON seperti

exportData = 'data:text/json;charset=utf-8,';
exportData += escape(JSON.stringify(jsonObject));
encodedUri = encodeURI(exportData);
newWindow = window.open(encodedUri);

Tapi aku hanya melihat sebuah halaman dengan JSON data yang ditampilkan pada itu, tidak men-download.

Aku pergi melalui beberapa penelitian dan ini klaim untuk bekerja tapi aku don't melihat perbedaan apapun untuk kode saya.

Aku kehilangan sesuatu dalam kode saya?

Terima kasih untuk membaca pertanyaan saya:)

123 2013-11-01T05:42:15+00:00 10
 Community
Community
Pertanyaan edit 23 Mei 2017 в 11:47
Pemrograman
javascript
json
Solution / Answer
 volzotan
volzotan
12 Juni 2015 в 10:23
2015-06-12T10:23:11+00:00
Lebih
Sumber
Sunting
#22684916

Ini adalah bagaimana saya soal itu bagi saya aplikasi:

HTML: <id="downloadAnchorElem" style="display:none;"></a>

JS (JS murni, tidak jQuery di sini):

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();

Dalam hal ini, storageObj adalah js objek yang anda ingin menyimpan, dan "adegan.json" ini hanya sebuah contoh nama untuk file yang dihasilkan.

Pendekatan ini memiliki beberapa keuntungan atas lainnya diusulkan:

  • Tidak ada elemen HTML yang perlu diklik
  • Hasil akan diberi nama seperti yang anda inginkan
  • tidak ada jQuery yang dibutuhkan

Saya membutuhkan perilaku ini tanpa eksplisit mengklik karena saya ingin memicu men-download secara otomatis di beberapa titik dari js.

JS solusi (HTML tidak diperlukan):

  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();
  }
 bformet
bformet
Jawaban edit 28 Mei 2018 в 8:12
202
0
Eugene Yu
Eugene Yu
3 Desember 2013 в 6:02
2013-12-03T06:02:34+00:00
Lebih
Sumber
Sunting
#22684913

Menemukan sebuah jawaban.

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');

tampaknya bekerja dengan baik bagi saya.

Semua kredit pergi ke @koboi-ben-alman, yang merupakan penulis dari kode di atas

Eugene Yu
Eugene Yu
Jawaban edit 6 Januari 2015 в 11:32
37
0
 jbcdefg
jbcdefg
9 Juni 2015 в 9:09
2015-06-09T09:09:24+00:00
Lebih
Sumber
Sunting
#22684915

Ini akan menjadi murni JS versi (diadaptasi dari cowboy's):

var obj = {a: 
23, b: "4 5 6"}; var data = "text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(obj)); var a = document.createElement('a'); a.href = 'data:' + data; a.download = 'data.json'; a.innerHTML = 'download JSON'; var container = document.getElementById('container'); container.appendChild(a);

%2F&referer=http%3A%2F%2Fde-vraag.com%2Fid%2F57
77
4" target="_blank" rel="ugc nofollow noreferrer" class="text-blue hover:opacity-60 transition">
/embedded/result,js,html,css/">

24
0
 Gautham
Gautham
9 Agustus 2017 в 3:28
2017-08-09T15:28:52+00:00
Lebih
Sumber
Sunting
#22684919

Anda bisa mencoba menggunakan:

  • native JavaScript API's Blob konstruktor dan
  • the FileSaver.js saveAs() metode

Tidak perlu berurusan dengan setiap elemen HTML sama sekali.

var data = {
    key: 'value'
};
var fileName = 'myData.json';

// Create a blob of the data
var fileToSave = new Blob([JSON.stringify(data)], {
    type: 'application/json',
    name: fileName
});

// Save the file
saveAs(fileToSave, fileName);

Jika anda ingin cantik mencetak JSON, per jawaban, anda bisa menggunakan:

JSON.stringify(data,undefined,2)
 user1063287
user1063287
Jawaban edit 14 September 2018 в 10:47
16
0
 maia
maia
9 Januari 2017 в 5:23
2017-01-09T17:23:27+00:00
Lebih
Sumber
Sunting
#22684917

Berikut ini bekerja untuk saya:

/* function to save JSON to file from browser
* adapted from http://bgrins.github.io/devtools-snippets/#console-save
* @param {Object} data -- json object to save
* @param {String} file -- file name to save to 
*/
function saveJSON(data, filename){

    if(!data) {
        console.error('No data')
        return;
    }

    if(!filename) filename = 'console.json'

    if(typeof data === "object"){
        data = JSON.stringify(data, undefined, 4)
    }

    var blob = new Blob([data], {type: 'text/json'}),
        e    = document.createEvent('MouseEvents'),
        a    = document.createElement('a')

    a.download = filename
    a.href = window.URL.createObjectURL(blob)
    a.dataset.downloadurl =  ['text/json', a.download, a.href].join(':')
    e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
    a.dispatchEvent(e)
}

dan kemudian menyebutnya seperti begitu

saveJSON(myJsonObject, "saved_data.json");
11
0
 Brad
Brad
13 April 2017 в 9:19
2017-04-13T09:19:05+00:00
Lebih
Sumber
Sunting
#22684918

Saya baru-baru ini untuk membuat sebuah tombol yang akan men-download sebuah file json dari semua nilai-nilai dalam bentuk yang besar. Aku membutuhkan ini untuk bekerja dengan IE/Edge/Chrome. Ini adalah apa yang saya lakukan:

function download(text, name, type)
    {
        var file = new Blob([text], {type: type});
        var isIE = /*@[email protected]*/false || !!document.documentMode;
        if (isIE)
        {
            window.navigator.msSaveOrOpenBlob(file, name);
        }
        else
        {
            var a = document.createElement('a');
            a.href = URL.createObjectURL(file);
            a.download = name;
            a.click();
        }
     }

download(jsonData, 'Form_Data_.json','application/json');

Ada satu masalah dengan nama file dan ekstensi pada tepi tetapi pada saat menulis ini tampaknya menjadi sebuah bug dengan Tepi yang disebabkan diperbaiki.

Semoga ini bisa membantu seseorang

Fabian  von Ellerts
Fabian von Ellerts
Jawaban edit 16 Januari 2019 в 11:41
8
0
Pengguna anonim
9 Juni 2018 в 9:00
2018-06-09T09:00:44+00:00
Lebih
Sumber
Sunting
#22684920

Sederhana, bersih solusi bagi mereka yang hanya menargetkan browser modern:

function downloadTextFile(text, name) {
  const a = document.createElement('a');
  const type = name.split(".").pop();
  a.href = URL.createObjectURL( new Blob([text], { type:`text/${type === "txt" ? "plain" : type}` }) );
  a.download = name;
  a.click();
}

downloadTextFile(JSON.stringify(myObj), 'myObj.json');
5
0
 robertjd
robertjd
23 Agustus 2014 в 12:15
2014-08-23T00:15:05+00:00
Lebih
Sumber
Sunting
#22684914

Download milik dari link adalah baru dan tidak didukung di Internet Explorer (lihat tabel kompatibilitas di sini). Untuk cross-browser solusi untuk masalah ini aku akan melihat FileSaver.js

4
0
 Abido
Abido
2 Oktober 2018 в 2:53
2018-10-02T14:53:50+00:00
Lebih
Sumber
Sunting
#22684922

Bereaksi: tambahkan ini di mana anda inginkan dalam membuat metode.

• Objek dalam negeri:

<a
  className="pull-right btn btn-primary"
  style={{ margin: 10 }}
  href={`data:text/json;charset=utf-8,${encodeURIComponent(
  JSON.stringify(this.state.objectToDownload)
  )}`}
  download="data.json"
>
  DOWNLOAD DATA AS JSON
</a>

• Objek dalam alat peraga:

<a
  className="pull-right btn btn-primary"
  style={{ margin: 10 }}
  href={`data:text/json;charset=utf-8,${encodeURIComponent(
  JSON.stringify(this.props.objectToDownload)
  )}`}
  download="data.json"
>
  DOWNLOAD DATA AS JSON
</a>

className dan gaya adalah opsional, mengubah gaya sesuai dengan kebutuhan anda.

 Abido
Abido
Jawaban edit 14 Desember 2018 в 5:33
2
0
 minimulin
minimulin
1 November 2013 в 6:36
2013-11-01T06:36:14+00:00
Lebih
Sumber
Sunting
#22684912

Cobalah untuk mengatur MIME-type: exportData = &#39;data:application/octet-stream;charset=utf-8,&#39;;

Tapi ada dapat masalah dengan nama file dalam dialog simpan.

 minimulin
minimulin
Jawaban edit 1 November 2013 в 6:47
1
0
Related communities 1
JavaScript Indonesia
JavaScript Indonesia
14 549 pengguna
Grup JavaScript yang membahas JavaScript, framework JS, dan Node JS secara universal. Cek Pinned Message untuk keterangan lebih lanjut. Komunitas ReactJS: https://t.me/react_idn
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
UbiBot UK
Terdaftar 15 jam yang lalu
2
Галина Утяшова
Terdaftar 1 hari yang lalu
3
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
4
Akshit Mehta
Terdaftar 1 minggu yang lalu
5
me you
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi