Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    creare ARRAY di RECORD dinamicamente, da json

    Ciao a tutti, ho la seguente necessità: creare un array dinamicamente, prendendo i dati da un file json in arrivo da una chiamata ajax. Il mio problema è che l'array che voglio creare, non deve essere formato da singoli elementi,ma bensì da record.
    Mi spiego meglio con un esempio:

    FILE JSON IN ARRIVO:

    {
    "negozi":{

    "num1":{
    "name": "Panificio",
    "address": "Via Farini",
    "num": "92838390"
    },

    "num2":{
    "name": "Frutta",
    "address": "Piazza ciao",
    "num": "4434886"
    }
    }
    }


    Se volessi (in javascipt) salvare in un array tutti i parametri ADDRESS in arrivo dalla chiamata ajax, so che potrei fare così:


    success: function(in_arrivo){
    var conta=0;
    indirizzi=new Array();
    for ( el in in_arrivo.negozi){
    indirizzi[conta]= in_arrivo.[el].address;
    conta ++; }


    in questo modo,al termine del ciclo FOR, l'array INDIRIZZI sarebbe reimpito così: [ "Via Farini", "Piazza ciao"]

    Invece io vorrei creare un array, in cui ogni elemento è un record, il quale contiene tutti i campi di ogni elemento del file json in arrivo; quindi fatto così:

    [{name:"Panificio",address:"Via Farini",tel:"92838390"},
    {name:"Frutta",address:"Piazza ciao",tel:"4434886"}]

    Le parti in rosso devono proprio essere delle stringhe; un array strutturato in questo modo mi serve per riempire una tabella realizzaata con jqgrid, la quale necessita questa struttura.
    Nell'esempio il file json è composto da soli due elementi (i negozi) per sempicità, ma vorrei ovviamente che funzionasse dinamicamente, e quindi con un qualsiasi numero di elementi.

  2. #2
    Non so se ho capito bene, potresti provare così

    success: function(in_arrivo){
    var record='[{';
    for ( el in in_arrivo.negozi){
    record+=el+':'+in_arrivo.negozi[el]+',';
    }
    record+='}]';
    }

    devi poi togliere la virgola all'ultimo elemento del record con substr tipo.

  3. #3
    No, così non funziona, però mi hai dato lo spunto, e ho fatto questo:

    success: function(in_arrivo){


    var record ='[';
    for ( el in in_arrivo.negozi){

    record+='{name:" '+in_arrivo.negozi[el].name+' ", address:" '+in_arrivo.negozi[el].address+' ", tel:" '+in_arrivo.negozi[el].num+' "},';
    }
    var lungh = record.length;
    record = record.substring(0,lungh-1); // tolgo l'ultimo carattere della stringa,ovvero la virgola
    record+=']';


    in questo modo effettivamente si crea una stringa che rappresenta esattamente cioò che volevo, ovvero:


    [{name:"Panificio",address:"Via Farini",tel:"92838390"},
    {name:"Frutta",address:"Piazza ciao",tel:"4434886"}]


    L'unico probelma che mi rimane ora è COME TRASFORMARE LA STRINGA IN UN VERO E PROPRIO ARRAY??

    mi verrebbe da pensare a una cosa del genere,ma è troppo astatto:

    var mydata = new Array();
    mydata= record;

    Sapete come trasformare una stringa in un valore??

  4. #4
    dovrei aver risolto:

    var mydata = new Array();
    mydata= eval (record);

  5. #5
    Forse mi sfugge qualcosa: perchè costruire una stringa con la sintassi per creare un array e poi fare eval per farlo diventare un array? Mi pare contorto all'ennesima potenza. Basta che crei un array vuoto e fai push nell'array all'interno del ciclo for che hai già.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  6. #6
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    codice:
    function Negozio (sName, sAddress, sTel) {
    	this.name = sName;
    	this.address = sAddress;
     	this.tel = sTel;
    }
    [...]

    codice:
    success: function (in_arrivo) {
    	var indirizzi = [];
    	for (var el in in_arrivo.negozi) {
    		indirizzi.push(new Negozio(in_arrivo.negozi[el].address, in_arrivo.negozi[el].name, in_arrivo.negozi[el].tel));
    	}
    }
    oppure (più sinteticamente):

    codice:
    function Negozio (oNegozio) {
    	this.name = oNegozio.name;
    	this.address = oNegozio.address;
     	this.tel = oNegozio.tel;
    }
    [...]

    codice:
    success: function (in_arrivo) {
    	var indirizzi = [];
    	for (var el in in_arrivo.negozi) {
    		indirizzi.push(new Negozio(in_arrivo.negozi[el]));
    	}
    }

  7. #7
    @ carlomarx

    il codice che hai scritto tu, se non sbaglio dovrebbe cerare un array fatto così:

    [{Panificio,Via Farini,92838390},
    {Frutta,Piazza ciao,4434886}]

    o mi sbaglio??
    perchè quello che serve a me è esattamente così:

    [{name:"Panificio",address:"Via Farini",tel:"92838390"},
    {name:"Frutta",address:"Piazza ciao",tel:"4434886"}]

  8. #8
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Originariamente inviato da Johannesynt
    @ carlomarx

    il codice che hai scritto tu, se non sbaglio dovrebbe cerare un array fatto così:

    [{Panificio,Via Farini,92838390},
    {Frutta,Piazza ciao,4434886}]

    o mi sbaglio??
    Ti sbagli

  9. #9
    Si scusami. Non conoscendo molto bene javascript, avevo trovato un modo funzionante per come era venuto in mente a me, ma il tuo metodo è sicuramente migliore è più "giusto". Ti ringrazio

  10. #10
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Il tuo metodo non può funzionare se non lanci un eval(). Ed eval() è una delle cose più dispendiose di memoria che esistono in javascript...

    In ogni caso questo è sbagliato:
    var mydata = new Array();
    mydata= eval (record);

    la prima riga è superflua. E in più c'è quello che ti ho detto a proposito di eval.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.