2011-12-26 28 views
8

hola a todos tengo un objeto JSON comoobjeto Analizar 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 "}} 

y quiero analizarlo como

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

¿Cómo voy a hacer esto. Escribí este código, pero su Givin longitud de la matriz 0 mi código es

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

Su matriz analizada casi no tiene nada que ver con el JSON original: tenga más en claro la lógica involucrada y publique el ejemplo correcto. –

+2

No use 'eval' para analizar JSON en absoluto. – naveen

+0

Posible duplicado de [¿Puede un objeto JSON devuelto por PHP contener un objeto de fecha] (http://stackoverflow.com/questions/1428598/), [¿Hay una conversión simple para este formato de fecha y hora?] (Http: // stackoverflow .com/questions/2349236 /). Véase también [¿Puede un objeto JSON devuelto por PHP contener un objeto de fecha] (http://stackoverflow.com/questions/1428598/) – outis

Respuesta

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ómo hacer esto para que pueda tomar cualquier json y producir el código de la js? – SuperUberDuper

1

Parece que ya está usando jQuery por lo que sólo tiene que utilizar $ .parseJSON. (http://api.jquery.com/jQuery.parseJSON/)

Deberá iterar sobre el objeto creado para convertir las cadenas de fecha en objetos 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

Mi código:

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

¿Por qué usar 'eval' cuando' JSON.parse' está integrado en los navegadores ahora? –

+1

@Amaan para compatibilidad. tal es IE6 ... – ijse

+0

@Amaan o podemos usar 'RegExp()' para analizar JSON manualmente. – ijse

0

para recoger todas elemento de una matriz y devolver un objeto JSON - este código es básicamente para obtener todos los valores de un cuadro de selección .. pero usted puede modificarlo según su requisito.

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

para analizar los mismos datos que avanzamos a través gusta este

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

Tal vez este método no existía hace 5 años. Pero si quiere embellecer sus Datos JSON o simplemente un Objeto JS simple en el registro, solo el método JSON.stringify() es suficiente.

entrada

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

Analizar

JSON.stringify(cat, null, 2) 

salida

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

Nota: en el método stringify 2 es nu mber de espacios.

Cuestiones relacionadas