2011-12-26 3 views
8

bonjour j'ai un objet JSON commeParse objet JSON en 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 "}} 

et je veux analyser comme

[ 
      { 
       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) 
      }] 

Comment puis-je faire cela. je l'ai écrit ce code, mais sa longueur de tableau Givin 0 mon code est

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

Votre tableau analysé n'a pratiquement rien à voir avec le fichier JSON d'origine - veuillez préciser la logique et l'exemple correct. –

+2

Veuillez ne pas utiliser 'eval' pour analyser JSON. – naveen

+0

Copie possible de [Un objet JSON retourné par PHP contient un objet date] (http://stackoverflow.com/questions/1428598/), [Existe-t-il une conversion simple pour ce format datetime?] (Http: // stackoverflow .com/questions/2349236 /). Voir aussi [Un objet JSON renvoyé par PHP peut-il contenir un objet date] (http://stackoverflow.com/questions/1428598/) – outis

Répondre

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

comment faire ceci pour que cela prenne n'importe quel json et produise la forme de code du js? – SuperUberDuper

1

On dirait que vous utilisez déjà jQuery donc il suffit d'utiliser .parseJSON $. (http://api.jquery.com/jQuery.parseJSON/)

Vous devrez parcourir l'objet créé pour transformer les chaînes de date en objets 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

Mon code:

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

Pourquoi utiliser 'eval' quand' JSON.parse' est intégré dans les navigateurs? –

+1

@Amaan pour la compatibilité. tel est IE6 ... – ijse

+0

@Amaan ou nous pouvons utiliser 'RegExp()' pour analyser JSON manuellement. – ijse

0

pour recueillir tous les élément d'un tableau et retourner un objet JSON - ce code est essentiellement d'obtenir toutes les valeurs d'une boîte de sélection .. mais vous pouvez le modifier selon vos besoins.

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; 
    }, 

pour analyser les mêmes données que nous traversons comme celui-ci

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

Peut-être que cette méthode n'existait pas il y a 5 ans. Mais si vous voulez donner des précautions à vos données JSON ou juste un simple objet JS dans le journal, la méthode JSON.stringify() suffit.

entrée

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

Parse

JSON.stringify(cat, null, 2) 

sortie

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

Note: dans la méthode 2 est stringify nu mber d'espaces.