2011-12-26 20 views
8

ciao a tutti ho un oggetto JSON comeParse JSON oggetto in JavaScript

{"event1":{"title":"My birthday","start":"12\/27\/2011 10:20 ","end":"12\/27\/2011 00:00 "},"event2":{"title":"My birthday again","start":"12\/27\/2011 10:20 ","end":"12\/27\/2011 00:00 "}} 

e voglio analizzarlo come

[ 
      { 
       title: 'All Day Event', 
       start: new Date(y, m, 1) 
      }, 
      { 
       title: 'Long Event', 
       start: new Date(y, m, d-5), 
       end: new Date(y, m, d-2) 
      }] 

come farò a fare questo. Ho scritto questo codice, ma il suo GIVIN lunghezza dell'array 0 il mio codice è

var response = eval(data); 
     $.each(response, function() { 
      obj = {}; 
      $.each(this, function(k, v) { 
       if(k=="start") 
       { 
        obj[k] = new Date(v); 
       } 
       if(k=="end") 
       { 
        obj[k] = new Date(v); 
       } 
       else 
       { 
        obj[k] = v; 
       } 
       event_data.push(obj); 

      }); 

     }); 
+1

L'array analizzato non ha quasi nulla a che fare con il JSON originale: si prega di essere più chiari sulla logica coinvolta e di pubblicare l'esempio corretto. –

+2

Si prega di non utilizzare 'eval' per analizzare JSON affatto. – naveen

+0

Possibile duplicato di [Un oggetto JSON restituito da PHP può contenere un oggetto data] (http://stackoverflow.com/questions/1428598/), [Esiste una conversione semplice per questo formato datetime?] (Http: // stackoverflow .com/domande/2349236 /). Vedi anche [Un oggetto JSON restituito da PHP può contenere un oggetto data] (http://stackoverflow.com/questions/1428598/) – outis

risposta

15
data = JSON.parse('{"event1":{"title":"My birthday","start":"12\/27\/2011 10:20 ","end":"12\/27\/2011 00:00 "},"event2":{"title":"My birthday again","start":"12\/27\/2011 10:20 ","end":"12\/27\/2011 00:00 "}}') 

arr = [] 
for(var event in data){ 
    var dataCopy = data[event] 
    for(key in dataCopy){ 
     if(key == "start" || key == "end"){ 
      // needs more specific method to manipulate date to your needs 
      dataCopy[key] = new Date(dataCopy[key]) 
     } 
    } 
    arr.push(dataCopy) 
} 

alert(JSON.stringify(arr)) 
+0

come fare in modo che sia possibile prendere qualsiasi json e produrre il codice in forma di js? – SuperUberDuper

1

Sembra che si sta già utilizzando jQuery così basta usare $ .parseJSON. (http://api.jquery.com/jQuery.parseJSON/)

Dovrai iterare sull'oggetto che è stato creato per trasformare le stringhe di data in oggetti Date.

1
var data = { 
    "event1": { 
     "title": "My birthday", 
     "start": "12\/27\/2011 10:20 ", 
     "end": "12\/27\/2011 00:00 " 
    }, 
    "event2": { 
     "title": "My birthday again", 
     "start": "12\/27\/2011 10:20 ", 
     "end": "12\/27\/2011 00:00 " 
    } 
}; 

var response = eval(data); 
var events = []; 
$.each(response, function(key, event) { 
    var obj = {}; 
    for (var prop in event) { 
     obj[prop] = event[prop]; 
    } 
    obj["start"] = new Date(obj["start"]); 
    obj["end"] = new Date(obj["end"]); 
    events.push(obj); 
}); 


console.log(events); 
1

Il mio codice:

var datas = '{"event1":{"title":"My birthday","start":"12\/27\/2011 10:20 ","end":"12\/27\/2011 00:00 "},"event2":{"title":"My birthday again","start":"12\/27\/2011 10:20 ","end":"12\/27\/2011 00:00 "}}'; 

var dataObj = eval("(" + datas + ")"); 
var finalArr = []; 
for(var i in dataObj) { 
    var t = dataObj[i]; 
    finalArr.push({ 
     title: t.title, 
     start: new Date(t.start), 
     end: new Date(t.end) 
    }); 
} 

console.log(finalArr); 
+0

Perché usare 'eval' quando' JSON.parse' è ora integrato nei browser? –

+1

@Amaan per compatibilità. tale è IE6 ... – ijse

+0

@Amaan oppure possiamo usare 'RegExp()' per analizzare manualmente JSON. – ijse

0

per raccogliere tutte le elemento di un array e restituisce un oggetto JSON - questo codice è sostanzialmente quella di ottenere tutti i valori di una casella di selezione .. ma puoi modificarlo secondo le tue esigenze.

collectData: function (arrayElements) { 

     var main = []; 

     for (var i = 0; i < arrayElements.length; i++) { 
      var data = {}; 
      this.e = arrayElements[i];    
      data.text = arrayElements[i].text; 
      data.val = arrayElements[i].value; 
      main[i] = data; 
     } 
     return main; 
    }, 

per analizzare gli stessi dati andiamo attraverso come questo

dummyParse: function (json) {  
     var o = JSON.parse(json); //conerted the string into JSON object   
     $.each(o, function() { 
      inner = this; 
      $.each(inner, function (index) { 
       alert(this.text) 
      }); 
     }); 

} 
0

Forse questo metodo non esistesse 5 anni fa. Ma se vuoi rendere i tuoi dati JSON o solo un oggetto JS semplice nel log solo il metodo JSON.stringify() è sufficiente.

ingresso

let cat = { 
     name: {fist: "Fluffy", last: "LaBeouf"}, 
     color: "White" 
    } 

Parse

JSON.stringify(cat, null, 2) 

uscita

{ 
    "name": { 
    "fist": "Fluffy", 
    "last": "LaBeouf" 
    }, 
    "color": "White" 
} 

Nota: nel metodo di stringa i 2 è nu mber di spazi.