web-dev-qa-db-fra.com

Écrire un objet json dans un fichier texte en javascript

J'ai un objet JSON en javascript. Je veux simplement écrire l'objet JSON dans un fichier texte. D'après les informations que j'ai trouvées jusqu'à présent, il est impossible de le faire pour des raisons de sécurité du côté client. Y at-il un travail autour?. Sera-t-il possible de modifier un fichier déjà présent si des valeurs factices sont initialement insérées?

Merci

28
user3288346

Une chose à faire est de configurer le JSON en tant que téléchargement à la volée.

var data = "{name: 'Bob', occupation: 'Plumber'}";
var url = 'data:text/json;charset=utf8,' + encodeURIComponent(data);
window.open(url, '_blank');
window.focus();

Démo de travail: http://jsfiddle.net/sLq3F/

En dehors de cela, vous ne pouvez pas écrire un JSON dans un fichier côté client pour des raisons de sécurité. (Sinon, vous avez accès aux systèmes de fichiers des utilisateurs de votre site Web.) Vous devrez pour cela utiliser une langue côté serveur et stocker le fichier côté serveur.


Correction: On dirait que vous pouvez écrire dans un fichier, c’est-à-dire une "section en sandbox" du système de fichiers de l’utilisateur. Voir le commentaire de Kevin Jantzer ci-dessous.

Another Correction: Désolé, l'API du système de fichiers n'est pas utilisée. Du site Web HTMl5Rocks: "En avril 2014, il a été annoncé sur public-webapps que les spécifications de l'API du système de fichiers devaient être considérées comme mortes. D'autres navigateurs ont montré peu d'intérêt pour sa mise en œuvre."

35
ktm5124

Cette solution est peut-être un peu plus élégante, testée sous Chrome, FF et ie7 à ie10, testée avec du texte, JSON, PDF et des données XLS (en utilisant le type de contenu approprié)

Fournissez à la fonction saveFile() un blob de données ou créez-en un à la volée avec type défini sur néant et vos données entre les [] 's.

Dans cet exemple, nous allons simplement stringifier l'objet settings et définir le type de données correctement.

settings = { any_kind_of_object: true };
json_str = JSON.stringify(settings);

saveFile('yourfilename.json', "data:application/json", new Blob([json_str],{type:""}));

function saveFile (name, type, data) {
    if (data != null && navigator.msSaveBlob)
        return navigator.msSaveBlob(new Blob([data], { type: type }), name);

    var a = $("<a style='display: none;'/>");
    var url = window.URL.createObjectURL(new Blob([data], {type: type}));
    a.attr("href", url);
    a.attr("download", name);
    $("body").append(a);
    a[0].click();
    setTimeout(function(){  // fixes firefox html removal bug
        window.URL.revokeObjectURL(url);
        a.remove();
    }, 500);  
}
0
ChrisAdmin