0

Me gustaría saber como puedo agregar un elemento al json :

let datos = [
    { "id": 197, "entrada": "07:00:00", "salida": "18:00:00", "descanso": "02:00:00", "fecha": "2018-10-02", "proyecto": "Contrato 343/2017" },
    { "id": 198, "entrada": "21:00:00", "salida": "23:00:00", "descanso": "00:00:00", "fecha": "2018-10-03", "proyecto": "Contrato 343/2017" },
    { "id": 199, "entrada": "21:30:00", "salida": "00:00:00", "descanso": "00:00:00", "fecha": "2018-10-05", "proyecto": "Contrato 343/2017" },
    { "id": 200, "entrada": "01:00:00", "salida": "05:00:00", "descanso": "00:30:00", "fecha": "2018-10-08", "proyecto": "Contrato 343/2017" },
    { "id": 201, "entrada": "03:00:00", "salida": "08:00:00", "descanso": "01:00:00", "fecha": "2018-10-09", "proyecto": "Contrato 343/2017" }
];

Me gustaría recorrer ese array y en cada json agregar un nuevo valor llamado cantidad con un valor dinámico que lo tomaré de la resta de entrada y salida.

Un resultado parecido a este pero haciendolo de forma dinámica :

let datos = [
    { "id": 197, "entrada": "07:00:00", "salida": "18:00:00", "descanso": "02:00:00", "fecha": "2018-10-02", "proyecto": "Contrato 343/2017", 'cantidad' : '00:00:00'},
    { "id": 198, "entrada": "21:00:00", "salida": "23:00:00", "descanso": "00:00:00", "fecha": "2018-10-03", "proyecto": "Contrato 343/2017", 'cantidad' : '00:00:00'},
    { "id": 199, "entrada": "21:30:00", "salida": "00:00:00", "descanso": "00:00:00", "fecha": "2018-10-05", "proyecto": "Contrato 343/2017", 'cantidad' : '00:00:00'},
    { "id": 200, "entrada": "01:00:00", "salida": "05:00:00", "descanso": "00:30:00", "fecha": "2018-10-08", "proyecto": "Contrato 343/2017", 'cantidad' : '00:00:00'},
    { "id": 201, "entrada": "03:00:00", "salida": "08:00:00", "descanso": "01:00:00", "fecha": "2018-10-09", "proyecto": "Contrato 343/2017", 'cantidad' : '00:00:00'}
];
Darwin Zamora
  • 157
  • 1
  • 1
  • 9
  • 4
    [JSON != Objeto Javascript](https://es.stackoverflow.com/questions/164943/cu%C3%A1l-es-la-diferencia-entre-json-y-un-objeto-en-javascript) – Pablo Lozano Oct 05 '18 at 14:30
  • La pregunta fue editada, el mismo sentido de la pregunta ha cambiado. Creo que esto en injusto para los que ya han contestado. – enxaneta Oct 05 '18 at 15:45
  • Sólo edita tu respuesta y ya. Es nuevo colaborador, son obvias estas acciones. – Alberto Siurob Oct 05 '18 at 15:47
  • Todos los comentario funcionan el problema era mio que estaba haciendo una asignación mal y por eso no me funcionó el principio. Gracias a todos los que me colaboraron. – Darwin Zamora Oct 05 '18 at 15:51

5 Answers5

3

Hola prueba con esto:

let json = { 
  "id": 197,
  "entrada": '07:00:00',
  "salida": '18:00:00',
  "descanso": '02:00:00',
  "fecha": '2018-10-02',
  "cantidad": '09:00',
  "proyecto": 'Contrato 343/2017' };
  
  json.nuevaClave = "nuevoValor";
  console.log(json);
diego orellana
  • 409
  • 2
  • 11
0

Simplemente con javascript, agregandolo de la siguiente manera:

// asigno el json a una variable
var json = { "id": 197, "entrada": "07:00:00", "salida": "18:00:00", "descanso": 
  "02:00:00", "fecha": "2018-10-02","cantidad": "09:00", "proyecto": 
  "Contrato 343/2017" };

console.log(json);
  
// modifico el json agregando un nuevo atributo como
// si fuera un objeto
json.nuevaClave = "nuevoValor";

console.log(json);
Kleith
  • 3,773
  • 2
  • 13
  • 27
  • Esta muy bien tu ejemplo pero no me funciona, al hacer eso los datos se pierden y solo me toma el último valor cono un array. – Darwin Zamora Oct 05 '18 at 14:43
  • Cómo lo estás ejecutando? Cómo es que te está tomando el último valor como un `array`? – Kleith Oct 05 '18 at 14:46
  • Hago esto: let datos = {'uno' : 1, 'dos' : 2, 'tres' : 3}; datos.cuatro = 4; Solo me imprime el 4. – Darwin Zamora Oct 05 '18 at 14:50
  • Si eso lo ejecutás desde la consola, si, te muestra sólo el `4` pero si después de eso, hacés un `console.log(datos);` debería mostrarte todo el objeto con el `cuatro` incluido. – Kleith Oct 05 '18 at 14:53
0

Teniendo en cuenta de que si es un array o un object que son totalmente diferentes te dejo a continuación una gran diferencia:

var itemArray = {}, itemObject = [];
itemArray.id = 1;
itemArray.name = "albert";
itemObject.push(itemArray);

La variable itemArray como su nombre lo indica es un array y para agregar nuevos elementos es necesario llamar esta variable y agregar .claveDelArray.
Como se puede observar en el ejemplo agregamos id y name al array itemArray.

Para agregar nuevos elementos a un objecto-(Object) es necesario hacer uso del método push() y dentro del método pasar como parámetro el item que vamos agregar.

Identificando tu problema veo que tienes un array y quieres agregar un nuevo valor, para hacer esto lo puedes hacer de la siguiente manera:

var item = { "id": 197, "entrada": "07:00:00", "salida": "18:00:00", "descanso": 
  "02:00:00", "fecha": "2018-10-02","cantidad": "09:00", "proyecto": 
  "Contrato 343/2017" }

  item.nuevoValor = "Nuevo Valor"
  console.log(item);


Actualización
Tienes que crear un for y recorrer cada array del objeto e ir agregando el item que necesitas en el array.

let datos = [
        { "id": 197, "entrada": "07:00:00", "salida": "18:00:00", "descanso": "02:00:00", "fecha": "2018-10-02", "proyecto": "Contrato 343/2017" },
        { "id": 198, "entrada": "21:00:00", "salida": "23:00:00", "descanso": "00:00:00", "fecha": "2018-10-03", "proyecto": "Contrato 343/2017" },
        { "id": 199, "entrada": "21:30:00", "salida": "00:00:00", "descanso": "00:00:00", "fecha": "2018-10-05", "proyecto": "Contrato 343/2017" },
        { "id": 200, "entrada": "01:00:00", "salida": "05:00:00", "descanso": "00:30:00", "fecha": "2018-10-08", "proyecto": "Contrato 343/2017" },
        { "id": 201, "entrada": "03:00:00", "salida": "08:00:00", "descanso": "01:00:00", "fecha": "2018-10-09", "proyecto": "Contrato 343/2017" }
    ];
    for (var i = 0; i < datos.length; i++) {
        datos[i].cantidad = "00:00:00";
        console.log(datos);
    }
zerokira
  • 1,889
  • 4
  • 10
  • 37
0

Puedes trabajarlo con el método push del modo siguiente

let json = [{ "id": 197, "entrada": "07:00:00", "salida": "18:00:00", "descanso": 
  "02:00:00", "fecha": "2018-10-02"}]

console.log(json)

let nuevaData = json.push({"name": "SO en español", "cool": true})

console.log(json)

Aclaraciones

  1. la variable json almacena la estructura json original
  2. imprimo por primera vez la cadena json para ver su contenido
  3. a la variable nuevaData guarda, que a la variable json le asigno dos nuevas claves con el método push, lo que hará que se guarden al final de la estructura json original
  4. imprimo de nuevo el json y veré las nuevas clave/valor asignadas al final de la estructura
0

Tienes que recorrer el arreglo y luego meter en cada JSON un nuevo nodo, en este caso "cantidad". Si quieres restar te recomendaría el plugin moment.

Te dejo un código funcionando

let datos = [
    { "id": 197, "entrada": "07:00:00", "salida": "18:00:00", "descanso": "02:00:00", "fecha": "2018-10-02", "proyecto": "Contrato 343/2017" },
    { "id": 198, "entrada": "21:00:00", "salida": "23:00:00", "descanso": "00:00:00", "fecha": "2018-10-03", "proyecto": "Contrato 343/2017" },
    { "id": 199, "entrada": "21:30:00", "salida": "00:00:00", "descanso": "00:00:00", "fecha": "2018-10-05", "proyecto": "Contrato 343/2017" },
    { "id": 200, "entrada": "01:00:00", "salida": "05:00:00", "descanso": "00:30:00", "fecha": "2018-10-08", "proyecto": "Contrato 343/2017" },
    { "id": 201, "entrada": "03:00:00", "salida": "08:00:00", "descanso": "01:00:00", "fecha": "2018-10-09", "proyecto": "Contrato 343/2017" }
];

datos.forEach( function( dato ){
  let entrada  = moment(dato.entrada, 'HH:mm:ss');
  let salida   = moment(dato.salida, 'HH:mm:ss');
  let cantidad = salida.diff(entrada, 'hours');
  dato.cantidad = cantidad;
});

console.log( datos );
<script src="http://momentjs.com/downloads/moment.min.js"></script>
Alberto Siurob
  • 6,620
  • 4
  • 22
  • 59