2017-02-21 48 views
5

Używam kątowego 2. Chcę dać funkcjonalność do pobrania pliku JSON.Angular2 do eksportowania/pobierania pliku json

Podobnie jak mam odpowiedź z res = {bar: foo} wtedy chcę utworzyć plik json, który będzie zawierał tę odpowiedź, którą można pobrać na przycisk/kotwica.

Każda pomoc zostanie bardzo doceniona.

Odpowiedz

8

To było proste następnie spodziewałem

constructor(private sanitizer: DomSanitizer){} 

    generateDownloadJsonUri() { 
     var theJSON = JSON.stringify(this.resJsonResponse); 
     var uri = this.sanitizer.bypassSecurityTrustUrl("data:text/json;charset=UTF-8," + encodeURIComponent(theJSON)); 
     this.downloadJsonHref = uri; 
    } 

w szablonie

<a class="btn btn-clear" title="Download JSON" [href]="downloadJsonHref" download="download.json"></a> 
+0

Jak lub kiedy jest generateDownloadJsonUri() o nazwie –

+1

Użyłem na konstruktorze, ponieważ miałem gotowy 'this.resJsonResponse'. powinieneś zadzwonić po przygotowaniu Json Response. –

0

można użyć DomSanitizer: potrzebne jest https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html

oświadczenie importu:

import {enter code here DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser'; 
constructor(private sanitizer: DomSanitizer){} 

generateDownloadJsonUri() { 
    var theJSON = JSON.stringify(this.resJsonResponse); 
    var uri = this.sanitizer.bypassSecurityTrustUrl("data:text/json;charset=UTF-8," + encodeURIComponent(theJSON)); 
    this.downloadJsonHref = uri; 
} 
+0

Edytuj odpowiedź, dodając wyjaśnienie. Odpowiedzi tylko na kod niewiele robią, aby kształcić przyszłych czytelników SO. Twoja odpowiedź jest w kolejce moderacji za niską jakość. – mickmackusa

1

Miałem problemy, gdy mój json był tak duży, dodałem obiekt Blob w odpowiedzi Ankur Akvaliya i działa!

generateDownloadJsonUri() { 
    let theJSON = JSON.stringify(this.resJsonResponse); 
    let blob = new Blob([theJSON], { type: 'text/json' }); 
    let url= window.URL.createObjectURL(blob); 
    let uri:SafeUrl = this.sanitizer.bypassSecurityTrustUrl(url); 
    this.downloadJsonHref = uri; 
}