2011-12-26 47 views
8

xin chào tất cả tôi có một đối tượng JSON nhưParse Json đối tượng trong 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 "}} 

và tôi muốn phân tích nó như

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

Làm thế nào tôi sẽ làm điều này. tôi đã viết mã này nhưng độ dài mảng givin của nó 0 mã của tôi là

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

Mảng được phân tích cú pháp của bạn hầu như không liên quan gì đến JSON ban đầu - hãy làm rõ hơn về logic liên quan và đăng ví dụ chính xác. –

+2

Vui lòng không sử dụng 'eval' để phân tích cú pháp JSON. – naveen

+0

Có thể trùng lặp của [Đối tượng JSON có thể trả về bằng PHP có chứa đối tượng ngày tháng] (http://stackoverflow.com/questions/1428598/), [Có chuyển đổi đơn giản cho định dạng datetime này không?] (Http: // stackoverflow .com/questions/2349236 /). Xem thêm [Đối tượng JSON có thể trả về bằng PHP có chứa đối tượng ngày tháng] (http://stackoverflow.com/questions/1428598/) – outis

Trả lời

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

cách thực hiện điều này để có thể lấy bất kỳ json nào và tạo ra mẫu mã của các js không? – SuperUberDuper

1

Có vẻ như bạn đã sử dụng jQuery nên chỉ cần sử dụng $ .parseJSON. (http://api.jquery.com/jQuery.parseJSON/)

Bạn sẽ phải lặp qua đối tượng được tạo mặc dù để biến chuỗi ngày thành các đối tượng Ngày tháng.

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

Mã của tôi:

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

Tại sao sử dụng 'eval' khi' JSON.parse' được tích hợp trong trình duyệt? –

+1

@Aanan cho Khả năng tương thích. như vậy là IE6 ... – ijse

+0

@Amaan hoặc chúng ta có thể sử dụng 'RegExp()' để phân tích cú pháp JSON theo cách thủ công. – ijse

0

để thu thập tất cả các mục của một mảng và trả về một đối tượng json - mã này về cơ bản là để có được tất cả các giá trị của một hộp chọn .. nhưng bạn có thể sửa đổi nó theo yêu cầu của bạn.

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

để phân tích các dữ liệu cùng chúng tôi đi qua như thế này

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

Có lẽ phương pháp này không tồn tại 5 năm trước đây. Nhưng nếu bạn muốn prettify dữ liệu JSON của bạn hoặc chỉ là một đối tượng JS đơn giản trong đăng nhập chỉ JSON.stringify() phương pháp là đủ.

Input

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

Parse

JSON.stringify(cat, null, 2) 

Output

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

Lưu ý: trong phương pháp stringify 2 là nu mber của không gian.

Các vấn đề liên quan