2011-12-26 144 views
8

您好所有我有一個JSON對象像解析JSON對象的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 "}} 

,我想分析它像

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

我將如何做到這一點。我寫了這個代碼,但它得到安寧數組長度0我的代碼是

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

您的解析數組與原始JSON幾乎沒有任何關係 - 請更加清楚所涉及的邏輯併發布正確的示例。 – 2011-12-26 09:10:14

+2

請不要使用'eval'解析JSON。 – naveen 2011-12-26 09:14:58

+0

[PHP返回的JSON對象是否可以包含日期對象](http://stackoverflow.com/questions/1428598/),[此日期時間格式是否存在簡單轉換?](http:// stackoverflow .COM /問題/ 2349236 /)。另請參閱[可以通過PHP返回的JSON對象包含日期對象](http://stackoverflow.com/questions/1428598/) – outis 2011-12-26 10:39:57

回答

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

如何使這可以採取任何json並生成js的代碼形式? – SuperUberDuper 2015-12-08 09:40:48

1

看起來你已經在使用jQuery所以只需使用$ .parseJSON。 (http://api.jquery.com/jQuery.parseJSON/)

您必須迭代創建的對象才能將日期字符串轉換爲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

我的代碼:

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

爲什麼現在在瀏覽器中使用'eval'時'JSON.parse'? – 2011-12-26 09:42:36

+1

@Amaan兼容性。例如IE6 ... – ijse 2012-01-05 09:41:09

+0

@Amaan或者我們可以使用'RegExp()'手動解析JSON。 – ijse 2012-11-12 06:55:53

0

收集數組的所有項目,並返回一個JSON對象 - 這個代碼是基本的一個選擇框的所有值..但你可以根據你的要求修改它。

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

解析,我們通過這樣下去

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

相同的數據也許這個方法沒有5年前存在。但是如果你想美化你的JSON數據或只是一個簡單的JS對象,只需要在日誌中使用JSON.stringify()就足夠了。

輸入

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

解析

JSON.stringify(cat, null, 2) 

輸出

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

注意:在字符串化方法2是NU大量的空間。