解析JSON对象的JavaScript

问题描述:

您好所有我有一个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://*.com/questions/1428598/),[此日期时间格式是否存在简单转换?](http:// * .COM /问题/ 2349236 /)。另请参阅[可以通过PHP返回的JSON对象包含日期对象](http://*.com/questions/1428598/) – outis 2011-12-26 10:39:57

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

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

您必须迭代创建的对象才能将日期字符串转换为Date对象。

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); 

我的代码:

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

收集数组的所有项目,并返回一个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) 
      }); 
     }); 

} 

相同的数据也许这个方法没有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大量的空间。