[解決済み] ブラウザからJSONオブジェクトをファイルとしてダウンロードする。
2022-02-19 07:35:06
質問
csvファイルでデータ文字列をダウンロードできるようにするために、以下のコードを用意しました。
exportData = 'data:text/csv;charset=utf-8,';
exportData += 'some csv strings';
encodedUri = encodeURI(exportData);
newWindow = window.open(encodedUri);
クライアントがコードを実行すると、空白のページを生成し、csvファイルのデータのダウンロードを開始することは問題なく動作します。
そこで、JSONオブジェクトを使って次のようにやってみました。
exportData = 'data:text/json;charset=utf-8,';
exportData += escape(JSON.stringify(jsonObject));
encodedUri = encodeURI(exportData);
newWindow = window.open(encodedUri);
しかし、JSONデータが表示されたページが表示されるだけで、ダウンロードはしていない。
いろいろ調べたら これ は動作すると主張していますが、私のコードには何の違いも見られません。
私のコードに何か見落としがあるのでしょうか?
質問を読んでくれてありがとうございます:)
どのように解決するのですか?
私のアプリケーションでは、このように解決しました。
HTMLです。
<a id="downloadAnchorElem" style="display:none"></a>
JS(純粋なJS、ここではjQueryではない)。
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();
この場合
storageObj
は保存したいjsオブジェクト、"scene.json"は出来上がったファイルの名前の一例です。
この方法は、他の提案されている方法と比較して、次のような利点があります。
- HTML要素をクリックする必要がない
- 結果は、あなたが望むような名前になります
- jQuery不要
私は、jsからある時点で自動的にダウンロードを開始したいので、明示的なクリックなしでこの動作が必要でした。
JSソリューション(HTML不要)。
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();
}
関連
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み】Vueが定義されていない
-
[解決済み] JavaScriptでJSONをきれいに印刷する