Comment écrire des données dans un fichier JSON en utilisant Javascript
Par exemple, j'ai un .JSON
le fichier qui est la suivante:
[{"honda": "accord, "color": "red"},{"ford": "focus", "color": "black"}]
quel serait le code javascript pour pousser un autre objet {"nissan": "sentra", "color": "green"}
en cela .json
array pour faire de l' .json
le fichier
[{"honda": "accord, "color": "red"},{"ford": "focus", "color": "black"},{"nissan": "sentra", "color": "green"}]
la raison pour laquelle je demande est que je trouve beaucoup d'informations en ligne sur la façon de tirer des données à partir d'un .fichier JSON utilisant AJAX mais n'écrivant pas de nouvelles données à la .fichier JSON utilisant AJAX pour mettre à jour le .fichier json avec des données supplémentaires.
Toute aide serait être apprécié! Grâce.
4 réponses
Vous devez être clair sur ce que vous entendez par "JSON".
certaines personnes utilisent le terme JSON incorrectement pour désigner un simple vieil objet JavaScript, tel que [{a: 1}]
. Celui-ci arrive à être un tableau. Si vous voulez ajouter un nouvel élément du tableau, juste push
, comme
var arr = [{a: 1}];
arr.push({b: 2});
< [{a: 1}, {b: 2}]
le mot JSON peut aussi être utilisé pour désigner une chaîne de caractères encodée au format JSON:
var json = '[{"a": 1}]';
notez les guillemets (simples) indiquant qu'il s'agit d'une chaîne. Si vous avez une telle chaîne que vous avez obtenu de quelque part, vous devez d'abord l'analyser dans un objet JavaScript, en utilisant JSON.parse
:
var obj = JSON.parse(json);
Maintenant vous pouvez manipuler l'objet comme vous le voulez, y compris push
comme indiqué ci-dessus. Si vous voulez ensuite le remettre dans une chaîne JSON, alors vous utilisez JSON.stringify
:
var new_json = JSON.stringify(obj.push({b: 2}));
'[{"a": 1}, {"b": 1}]'
JSON est également utilisé comme un moyen courant de formater les données pour la transmission de données à destination et en provenance d'un serveur, où elles peuvent être sauvegardées (persisté). C'est là ajax vient dans. Ajax est utilisé à la fois pour obtenir des données, souvent au format JSON, à partir d'un serveur, et/ou pour envoyer des données au format JSON jusqu'au serveur. Si vous avez reçu une réponse d'une requête ajax au format JSON, vous devrez peut-être JSON.parse
comme décrit ci-dessus. Puis vous pouvez manipuler l'objet, le remettre au format JSON avec JSON.stringify
, et utilisez un autre appel ajax pour envoyer les données au serveur pour stockage ou autre manipulation.
vous utilisez le terme "fichier JSON". Normalement, le mot "fichier" est utilisé pour faire référence à un fichier physique sur certains appareils ( une chaîne de caractères que vous utilisez dans votre code, ou un objet JavaScript). Le navigateur n'a pas accès aux fichiers physiques de votre machine. Il ne peut pas lire ou écrire. En fait, le navigateur n'a même pas vraiment la notion de "fichier". Ainsi, vous ne pouvez pas simplement lire ou écrire un fichier JSON sur votre machine locale. Si vous envoyez JSON vers et depuis un serveur, alors bien sûr, le serveur pourrait stocker le JSON en tant que Fichier, mais il est plus probable que le serveur construise le JSON sur la base d'une requête ajax, sur la base de données extraites d'une base de données, ou décodant le JSON dans une requête ajax, puis stocke les données pertinentes dans sa base de données.
avez-vous vraiment besoin d'un "fichier JSON", et si oui, où existe-t-elle et d'où vient-il? Avez-vous une chaîne JSON-format, que vous devez analyser, mainpulate, et retourner dans une nouvelle chaîne JSON-format? Avez-vous besoin pour obtenir JSON de la le serveur, et le modifier puis le renvoyer au serveur? Ou est-ce que votre "fichier JSON" est en fait juste un objet JavaScript, que vous avez simplement besoin de manipuler avec la logique JavaScript normale?
JSON peut être écrit dans le stockage local en utilisant le JSON.stringify pour sérialiser un objet JS. Vous ne pouvez pas écrire dans un fichier JSON en utilisant seulement JS. Seuls les cookies ou le stockage local
var obj = {"nissan": "sentra", "color": "green"};
localStorage.setItem('myStorage', JSON.stringify(obj));
Et pour récupérer l'objet plus tard
var obj = JSON.parse(localStorage.getItem('myStorage'));
une inspection rapide montre que vous avez manqué un devis de clôture dans
{"honda": "accord
cependant, considérant ce que vous recherchez, vous pouvez faire une poussée de tableau très simple comme suit:
let jsonArr = [{"honda": "accord", "color": "red"},{"ford": "focus", "color": "black"}];
jsonArr.push({"nissan": "sentra", "color": "green"});
console.log(jsonArr) # shows [{ honda: 'accord', color: 'red' },{ ford: focus', color: 'black' }, { nissan: 'sentra', color: 'green' }]
malheureusement, aujourd'hui (septembre 2018), vous ne pouvez pas trouver de solution de navigateur croisé pour l'écriture de fichiers côté client.
Par exemple: dans un navigateur comme un Chrome nous avons aujourd'hui cette possibilité et on peut écrire FileSystemFileEntry.createWriter () à côté client, mais selon le docu:
cette fonctionnalité est obsolète. Bien qu'il puisse encore fonctionner dans certains navigateurs, son l'utilisation est déconseillée car elle peut être retirée à tout moment. Essayez d'éviter de l'utiliser.
Pour IE (mais pas MS Edge) nous pourrions utiliser ActiveX aussi, mais c'est seulement pour ce client.
si vous voulez mettre à jour votre navigateur croisé de fichiers JSON, vous devez utiliser le côté serveur et le côté client ensemble.
le script côté client
côté client, vous pouvez faire une requête au serveur et ensuite vous devez lire la réponse de serveur. Ou vous pouvez lire un fichier avec FileReader trop. Pour que le navigateur croise le fichier, vous devez avoir un serveur (voir ci-dessous sur la partie du serveur).
var xhr = new XMLHttpRequest(),
jsonArr,
method = "GET",
jsonRequestURL = "SOME_PATH/jsonFile/";
xhr.open(method, jsonRequestURL, true);
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4 && xhr.status == 200)
{
// we convert your JSON into JavaScript object
jsonArr = JSON.parse(xhr.responseText);
// we add new value:
jsonArr.push({"nissan": "sentra", "color": "green"});
// we send with new request the updated JSON file to the server:
xhr.open("POST", jsonRequestURL, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
// if you want to handle the POST response write (in this case you do not need it):
// xhr.onreadystatechange = function(){ /* handle POST response */ };
xhr.send("jsonTxt="+JSON.stringify(jsonArr));
// but on this place you have to have a server for write updated JSON to the file
}
};
xhr.send(null);
côté Serveur scripts
vous pouvez utiliser beaucoup de serveurs différents, mais je voudrais écrire sur PHP et Node.les serveurs js.
en utilisant la machine de recherche vous pouvez trouver "gratuit PHP Hébergement Web*" ou " noeud libre.js Web Hébergement". Pour PHP server je recommande 000webhost.com et pour le noeud.js je vous recommande de le voir et de lire cette liste.
PHP côté serveur script solution
le script PHP pour lire et écrire à partir du fichier JSON:
<?php
// This PHP script must be in "SOME_PATH/jsonFile/index.php"
$file = 'jsonFile.txt';
if($_SERVER['REQUEST_METHOD'] === 'POST')
// or if(!empty($_POST))
{
file_put_contents($file, $_POST["jsonTxt"]);
//may be some error handeling if you want
}
else if($_SERVER['REQUEST_METHOD'] === 'GET')
// or else if(!empty($_GET))
{
echo file_get_contents($file);
//may be some error handeling if you want
}
?>
noeud.js côté serveur script solution
je pense que ce noeud.js est un peu complexe pour les débutants. Ce n'est pas normal JavaScript comme dans le navigateur. Avant de commencer avec un Nœud.js je vous recommande de lire l'un de deux livres:
- nœud D'apprentissage: déplacement vers le côté serveur
- noeud.js Développement Web: développement côté Serveur
Le Noeud.js script pour la lecture et l'écriture à partir du fichier JSON:
var http = require("http"),
fs = require("fs"),
port = 8080,
pathToJSONFile = '/SOME_PATH/jsonFile.txt';
http.createServer(function(request, response)
{
if(request.method == 'GET')
{
response.writeHead(200, {"Content-Type": "application/json"});
response.write(fs.readFile(pathToJSONFile, 'utf8'));
response.end();
}
else if(request.method == 'POST')
{
var body = [];
request.on('data', function(chunk)
{
body.push(chunk);
});
request.on('end', function()
{
body = Buffer.concat(body).toString();
var myJSONdata = body.split("=")[1];
fs.writeFileSync(pathToJSONFile, myJSONdata); //default: 'utf8'
});
}
}).listen(port);
liens connexes pour le noeud.js: