Comment puis-je analyser un fichier JSON en récupérant toutes ses données et en l'utilisant dans mon code?
J'ai essayé d'importer le fichier et juste d'essayer de le consigner par la console, mais tout ce qu'il fait est d'imprimer Object {}:
import jsonData from "./file.json";
console.log(jsonData);
Voici à quoi ressemble mon fichier.json:
[
{
"id": 1,
"gender": "Female",
"first_name": "Helen",
"last_name": "Nguyen",
"email": "[email protected]",
"ip_address": "227.211.25.18"
}, {
"id": 2,
"gender": "Male",
"first_name": "Carlos",
"last_name": "Fowler",
"email": "[email protected]",
"ip_address": "214.248.201.11"
}
]
Je voudrais pouvoir accéder au prénom et au nom de famille de chaque composant et les imprimer sur le site Web.
var data = require('../../file.json'); // forward slashes will depend on the file location
for(var i = 0; i < data.length; i++) {
var obj = data[i];
console.log("Name: " + obj.first_name + ", " + obj.last_name);
}
J'ai aussi eu du mal à récupérer un objet vide. Même en utilisant require
comme suggéré ci-dessus.
fetch
cependant résolu mon problème:
fetch('./data/fakeData.json')
.then((res) => res.json())
.then((data) => {
console.log('data:', data);
})
(A ce jour, le support n'est pas optimal: http://caniuse.com/#feat=fetch )
Pour ceux d'entre vous qui ont également des problèmes avec cela, ce code semble avoir résolu le problème
var jsonData = require('../../file.json');
class blah extends React.Component {
render(){
var data;
function loadJSON(jsonfile, callback) {
var jsonObj = new XMLHttpRequest();
jsonObj.overrideMimeType("application/json");
jsonObj.open('GET', "../../file.json", true);
jsonObj.onreadystatechange = function () {
if (jsonObj.readyState == 4 && jsonObj.status == "200") {
callback(jsonObj.responseText);
}
};
jsonObj.send(null);
}
function load() {
loadJSON(jsonData, function(response) {
data = JSON.parse(response);
console.log(data);
});
}
load();
}
}
Les applications fournies avec webpack 2.0.0+ (telles que celles créées avec create-react-app ) prennent en charge les importations depuis json exactement comme dans la question (voir cette réponse .
Sachez que import
met en cache le résultat, même si ce résultat est analysé json. Par conséquent, si vous modifiez cet objet, les modules qui l'importent également font référence à l'objet same object, et non à une copie récemment analysée.
Pour obtenir une copie "propre", vous pouvez créer une fonction qui la copie, telle que:
import jsonData from './file.json';
const loadData = () => JSON.parse(JSON.stringify(jsonData));
Ou si vous utilisez lodash :
import jsonData from './file.json';
import { cloneDeep } from 'lodash';
const loadData = () => cloneDeep(jsonData);