J'ai enregistré un fichier JSON dans mon système local et créé un fichier JavaScript afin de lire le fichier JSON et d'imprimer les données. Voici le fichier JSON:
{"resource":"A","literals":["B","C","D"]}
Disons que c’est le chemin du fichier JSON: /Users/Documents/workspace/test.json
.
Quelqu'un pourrait-il m'aider à écrire un simple morceau de code pour lire le fichier JSON et imprimer les données qu'il contient en JavaScript?
Vous ne pouvez pas effectuer un appel AJAX vers une ressource locale car la demande est effectuée à l'aide de HTTP.
Une solution consiste à exécuter un serveur Web local, à servir le fichier et à appeler AJAX vers localhost.
Pour vous aider à écrire du code pour lire JSON, vous devriez lire la documentation de jQuery.getJSON()
:
Pour lire le fichier JSON local externe (data.json) à l'aide de javascript, créez d'abord votre fichier data.json:
data = '[{"name" : "Ashwin", "age" : "20"},{"name" : "Abhinandan", "age" : "20"}]';
Mentionnez le chemin du fichier json dans la source du script avec le fichier javascript.
<script type="text/javascript" src="data.json"></script>
<script type="text/javascript" src="javascrip.js"></script>
Obtenir l'objet à partir du fichier json
var mydata = JSON.parse(data);
alert(mydata[0].name);
alert(mydata[0].age);
alert(mydata[1].name);
alert(mydata[1].age);
Pour plus d'informations, voir cette référence .
Le chargement d'un fichier .json
] à partir du disque dur est une opération asynchrone. Il est donc nécessaire de spécifier une fonction de rappel à exécuter après le chargement du fichier.
function readTextFile(file, callback) {
var rawFile = new XMLHttpRequest();
rawFile.overrideMimeType("application/json");
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function() {
if (rawFile.readyState === 4 && rawFile.status == "200") {
callback(rawFile.responseText);
}
}
rawFile.send(null);
}
//usage:
readTextFile("/Users/Documents/workspace/test.json", function(text){
var data = JSON.parse(text);
console.log(data);
});
Cette fonction fonctionne également pour charger un fichier .html
ou .txt
, en remplaçant le paramètre de type mime par "text/html"
, "text/plain"
etc.
[{"name":"ay","id":"533"},
{"name":"kiy","id":"33"},
{"name":"iy","id":"33"},
{"name":"iy","id":"3"},
{"name":"kiy","id":"35"},
{"name":"kiy","id":"34"}]
'utf8'
de readFileSync
: cela le renvoie non pas par Buffer
(bien que JSON.parse
puisse le gérer), mais par une chaîne. Je crée un serveur pour voir le résultat ...var fs=require('fs');
var data=fs.readFileSync('words.json', 'utf8');
var words=JSON.parse(data);
var bodyparser=require('body-parser');
console.log(words);
var express=require('express');
var app=express();
var server=app.listen(3030,listening);
function listening(){
console.log("listening..");
}
app.use(express.static('website'));
app.use(bodyparser.urlencoded({extended:false}));
app.use(bodyparser.json());
app.get('/get/:id',function(req,res){
var i;
for(i=0;i<words.length;++i)
{
if(words[i].id==req.params.id){
res.send(words[i]);
}
}
console.log("success");
});
localhost:3030/get/33
, il vous donnera les détails relatifs à cet identifiant ... et vous le lirez également par son nom. Mon fichier json a des noms simillar avec ce code vous pouvez obtenir un nom de nom .... et il n’a pas imprimé tous les noms simillar app.get('/get/:name',function(req,res){
var i;
for(i=0;i<words.length;++i)
{
if(words[i].id==req.params.name){
res.send(words[i]);
}
}
console.log("success");
});
app.get('/get/name/:name',function(req,res){
Word = words.filter(function(val){
return val.name === req.params.name;
});
res.send(Word);
console.log("success");
});
app.get('/all',sendAll);
function sendAll(request,response){
response.send(words);
}
Quand dans Node.js ou en utilisant require.js dans le navigateur , vous pouvez simplement faire:
let json = require('/Users/Documents/workspace/test.json');
Remarque: le fichier est chargé une fois, les appels suivants utiliseront le cache.
Selon votre navigateur, vous pouvez accéder à vos fichiers locaux. Mais cela peut ne pas fonctionner pour tous les utilisateurs de votre application.
Pour ce faire, vous pouvez essayer les instructions à partir d’ici: http://www.html5rocks.com/en/tutorials/file/dndfiles/
Une fois votre fichier chargé, vous pouvez récupérer les données en utilisant:
var jsonData = JSON.parse(theTextContentOfMyFile);
Si vous utilisez des fichiers locaux, pourquoi ne pas simplement empaqueter les données sous forme d'objet js?
data.js
MyData = { resource:"A",literals:["B","C","D"]}
Non XMLHttpRequests , pas d'analyse, il suffit d'utiliser MyData.resource
directement
Très simple.
Renommez votre fichier JSON en ".js" à la place de ".json".
<script type="text/javascript" src="my_json.js"></script>
Alors suivez votre code normalement.
<script type="text/javascript">
var obj = JSON.parse(contacts);
Cependant, juste pour information, le contenu de mon json ressemble au snip ci-dessous.
contacts='[{"name":"bla bla", "email":bla bla, "address":"bla bla"}]';
Utiliser la Fetch API est la solution la plus simple:
fetch("test.json")
.then(response => response.json())
.then(json => console.log(json));
Cela fonctionne parfaitement dans Firefox, mais dans Chrome, vous devez personnaliser les paramètres de sécurité.
Comme beaucoup de personnes mentionnées précédemment, cela ne fonctionne pas avec un appel AJAX. Cependant, il y a un moyen de le contourner. En utilisant l'élément input, vous pouvez sélectionner votre fichier.
Le fichier sélectionné (.json) doit avoir cette structure:
[
{"key": "value"},
{"key2": "value2"},
...
{"keyn": "valuen"},
]
<input type="file" id="get_the_file">
Ensuite, vous pouvez lire le fichier en utilisant JS avec FileReader ():
document.getElementById("get_the_file").addEventListener("change", function() {
var file_to_read = document.getElementById("get_the_file").files[0];
var fileread = new FileReader();
fileread.onload = function(e) {
var content = e.target.result;
// console.log(content);
var intern = JSON.parse(content); // Array of Objects.
console.log(intern); // You can index every object
};
fileread.readAsText(file_to_read);
});
Utilisez simplement $ .getJSON, puis $ .each pour itérer la paire clé/valeur. Exemple de contenu pour le fichier JSON et le code fonctionnel:
{
{
"key": "INFO",
"value": "This is an example."
}
}
var url = "file.json";
$.getJSON(url, function (data) {
$.each(data, function (key, model) {
if (model.key == "INFO") {
console.log(model.value)
}
})
});
Vous pouvez utiliser la méthode XMLHttpRequest ():
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var myObj = JSON.parse(this.responseText);
//console.log("Json parsed data is: " + JSON.stringify(myObj));
}
};
xmlhttp.open("GET", "your_file_name.json", true);
xmlhttp.send();
Vous pouvez voir la réponse de myObj à l'aide de l'instruction console.log (commentée).
Si vous connaissez AngularJS, vous pouvez utiliser $ http:
MyController.$inject = ['myService'];
function MyController(myService){
var promise = myService.getJsonFileContents();
promise.then(function (response) {
var results = response.data;
console.log("The JSON response is: " + JSON.stringify(results));
})
.catch(function (error) {
console.log("Something went wrong.");
});
}
myService.$inject = ['$http'];
function myService($http){
var service = this;
service.getJsonFileContents = function () {
var response = $http({
method: "GET",
url: ("your_file_name.json")
});
return response;
};
}
Si vous avez le fichier dans un autre dossier, mentionnez le chemin complet au lieu du nom de fichier.
Puisque vous avez une application Web, vous pouvez avoir un client et un serveur.
Si vous ne possédez que votre navigateur et que vous souhaitez lire un fichier local à partir d'un javascript exécuté sur votre navigateur, cela signifie que vous ne disposez que d'un client. Pour des raisons de sécurité, le navigateur ne doit pas vous permettre de le faire.
Cependant, comme expliqué plus haut par lauhub, cela semble fonctionner:
http://www.html5rocks.com/en/tutorials/file/dndfiles/
Une autre solution consiste à installer quelque part sur votre machine un serveur Web (minuscule dans Windows ou monkey sous Linux) et avec une bibliothèque XMLHttpRequest ou D3, demandez le fichier au serveur et lisez-le. Le serveur va extraire le fichier du système de fichiers local et vous le transmettre via le Web.
Une solution de contournement simple consiste à placer votre fichier JSON dans un serveur exécuté localement. pour cela depuis le terminal, allez dans le dossier de votre projet et démarrez le serveur local sur un numéro de port, par exemple 8181
python -m SimpleHTTPServer 8181
Puis naviguez vers http: // localhost: 8181 / devrait afficher tous vos fichiers, y compris le JSON. N'oubliez pas d'installer python si vous n'en avez pas déjà.
Vous devez créer une nouvelle instance XMLHttpRequest et charger le contenu du fichier json.
Cette astuce fonctionne pour moi ( https://codepen.io/KryptoniteDove/post/load-json-file-locally-using-pure-javascript ):
function loadJSON(callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', 'my_data.json', true); // Replace 'my_data' with the path to your file
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
// Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
callback(xobj.responseText);
}
};
xobj.send(null);
}
loadJSON(function(response) {
// Parse JSON string into object
var actual_JSON = JSON.parse(response);
});
J'ai aimé ce que Stano/Meetar a commenté ci-dessus. Je l'utilise pour lire les fichiers .json. J'ai élargi leurs exemples en utilisant Promise. Voici le plunker pour le même. https://plnkr.co/edit/PaNhe1XizWZ7C0r3ZVQx?p=preview
function readTextFile(file, callback) {
var rawFile = new XMLHttpRequest();
rawFile.overrideMimeType("application/json");
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function() {
if (rawFile.readyState === 4 && rawFile.status == "200") {
callback(rawFile.responseText);
}
}
rawFile.send(null);
}
//usage:
// readTextFile("DATA.json", function(text){
// var data = JSON.parse(text);
// console.log(data);
// });
var task1 = function (){
return new Promise (function(resolve, reject){
readTextFile("DATA.json", function(text){
var data = JSON.parse(text);
console.log('task1 called');
console.log(data);
resolve('task1 came back');
});
});
};
var task2 = function (){
return new Promise (function(resolve, reject){
readTextFile("DATA2.json", function(text){
var data2 = JSON.parse(text);
console.log('task2 called');
console.log(data2);
resolve('task2 came back');
});
});
}
Promise.race([task1(), task2()])
.then(function(fromResolve){
console.log(fromResolve);
});
La lecture de JSON peut être déplacée dans une autre fonction, pour DRY; mais l'exemple ici est plus de montrer comment utiliser les promesses.
Si vous pouviez exécuter un serveur Web local (comme Chris P suggéré ci-dessus), et si vous pouviez utiliser jQuery, vous pourriez essayer http://api.jquery.com/jQuery.getJSON /
Vous pouvez utiliser D3 pour gérer le rappel et charger le fichier JSON local data.json
, comme suit:
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script>
d3.json("data.json", function(error, data) {
if (error)
throw error;
console.log(data);
});
</script>