J'ai un fichier local JSON qui ressemble à:

{
    "sites" : [
        {
            "name" : "Somename",
            "url" : "https://url.com",
            "api" : "http://url.com/api",
        },
        {
            "name" : "Somename2",
            "url" : "https://url2.com",
            "api" : "http://url2.com/api",
        }

}

Chaque api a une seule donnée entière que je dois stocker dans la base de données. Comment puis-je répéter un tel JSON en Javascript? Dès que je serai en mesure de récupérer cette URL, je pourrai écrire une autre fonction et obtenir l'entier que je veux. J'ai essayé:

function getNetworkData(){
    $.getJSON('../json/sites/site-list.json', function(data) {

    var sites = JSON.parse(data);

    sites.forEach(function(data){
        console.log(data.sites[0].name)
});

});
}

... mais ça ne marche pas. Je continue d'avoir une erreur:

Jeton inattendu o dans JSON en position 1

0
Maciaz 12 avril 2018 à 15:25

4 réponses

Meilleure réponse

La fonction $.getJSON analyse déjà la réponse du serveur / source.

Donc, vous n'avez pas besoin de l'analyser en utilisant JSON.parse, en outre, vous essayez de boucler en utilisant le tableau comme suit:

sites.forEach

Ce que vous voulez vraiment, c'est boucler l'attribut sites:

data.sites.forEach(function(s){
    console.log(s.name);
});
2
Ele 12 avril 2018 à 12:27

Comme ça:

function getNetworkData(){
  $.getJSON('../json/sites/site-list.json', function(data) {

    data.sites.forEach(function(site){
        console.log(site.name)
    });

  });
}

L'objet que vous parcourez n'a pas besoin de l'index.

site est déjà égal à sites [0] sur la première boucle, sites [1] sur la deuxième boucle, etc., il vous suffit donc de site.name

1
Djave 12 avril 2018 à 12:31

Ignorer JSON.parse(data); Vous obtiendrez un objet avec $.getJSON() que vous pourrez manipuler. Voir getJson

0
Tnc Andrei 12 avril 2018 à 12:28

Vous avez déjà obtenu JSON, il n'est pas nécessaire d'analyser. Reportez-vous à jQuery.getJSON

Mise à jour depuis

var sites = JSON.parse(data);

    sites.forEach(function(data){
        console.log(data.sites[0].name)
});

À

data.sites.forEach(function(site){
    console.log(site.name); // prints name
    console.log(site.api); // prints api
});
1
Nikhil Aggarwal 12 avril 2018 à 12:28