Preluare date din fisier JSON in Javascript

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
Stefan
Mesaje: 101

Preluare date din fisier JSON in Javascript

Salut, cum as putea prelua datele dintr-un fisier JSON cu ajutorul unor parametri folosind javascript?

Date din fisierul json

Cod: Selectaţi tot

{
	"Nume1": {
        	"nume": "Nume complet",
		"descriere": "Descriere persoana"
 	   },
	
	"Nume2": {
      		  "nume": "Nume complet2",
		"descriere": "Descriere persoana2"
   	 },
	
	"Nume3": {
       		 "nume": "Nume complet3",
		"descriere": "Descriere persoana 3"
	}
}
Pentru "Nume1" cum as putea prelua "nume" si "descriere" cu ajutorul parametrilor?
Am incercat asa" pastebin.com/wHJWRsWU , dar primesc eroarea

Cod: Selectaţi tot

TypeError: membri.x is undefined

MarPlo
Fisierul json e pe server cu site-ul sau pe alt site?
Ce cod ai sa preia acel fisier?

Stefan
Fisierul este pe server.

Codul:

Cod: Selectaţi tot

$(function() {  
  $('#clickme').click(function() {
       $.ajax({
       url: 'detalii.json',
       dataType: 'json',
       success: function(data) {
          var items = [];

          $.each(data, function(key, val) {
				// alert(key + ' ' + val);
				
				$.each(val, function(k1, v1) {
					items.push('<li id="' + k1 + '">' + v1 + '</li>');
				});
				
				

          });

          $('<ul/>', {
             'class': 'interest-list',
             html: items.join('')
          }).appendTo('body');

       },
      statusCode: {
         404: function() {
           alert('There was a problem with the server.  Try again soon!');
         }
       }
    });
  });
});
Ce modificare ar trebui facuta ca, prin parametri, sa se afiseze valorile respective? Sa nu se afiseze toate detaliile

MarPlo
Uite un exemplu cum poti prelua cu jQuery datele din fisierul tau "detalii.json" si sa citesti valorile din el.
Obiectul json preluat (aici retinut in variabila jsn) poate fi parcurs cu metoda for(var k in object).

Cod: Selectaţi tot

$(function() {
  $.ajax({
   url: 'detalii.json',
   dataType: 'json',
  success: function(resp) {
    var jsn =  resp;
    let nume1 = jsn.Nume1.nume;
    let desc1 = jsn.Nume1.descriere;

     alert(nume1 +' - '+ desc1);
   },
    statusCode: {
       404: function() {
         alert('There was a problem with the server.  Try again soon!');
       }
     }
  });
});

Stefan
Multumesc pentru acel cod. Dar cum as putea face ca Nume1 sa fie transmis prin parametru si apoi "transformat in variabila"? Am vazut ca se foloseste functia eval() sau window[var]/window["var"]

Exemplu:

param = 'Pers1';
nume1 = jsn.Pers1.nume;


Cod: Selectaţi tot

function test(param) {
  $.ajax({
   url: 'detalii.json',
   dataType: 'json',
  success: function(resp) {
    var jsn =  resp;
    
    /*
    ?
    transformare param in nume de variabila
    ?
    */
    
    let nume1 = jsn.[b][u]PERS1[/u][/b].nume;
    let desc1 = jsn.[b][u]PERS1[/u][/b].descriere;

     alert(nume1 +' - '+ desc1);
   },
    statusCode: {
       404: function() {
         alert('There was a problem with the server.  Try again soon!');
       }
     }
  });
};

MarPlo
Incearca asa (ca index de array):

Cod: Selectaţi tot

var param = 'Pers1';
nume1 = jsn[param].nume;
In codul tau:

Cod: Selectaţi tot

$(function() {
  $.ajax({
   url: 'detalii.json',
   dataType: 'json',
  success: function(resp) {
    var jsn =  resp;
    var param ='Nume1';
    let nume1 = jsn[param].nume;
    let desc1 = jsn[param].descriere;

     alert(nume1 +' - '+ desc1);
   },
    statusCode: {
       404: function() {
         alert('There was a problem with the server.  Try again soon!');
       }
     }
  });
});

Subiecte similare