Tengo un formulario de entrada como este:

 <div class="form-group">
            <label class="text-info">name</label>
            <input type="text" id="name" class="form-control" />
 </div>

Y un script básico como el siguiente:

$(document).ready(function () {
        $("#postform").submit(function (e) {
            e.preventDefault();
            var data = {
                name: $("#name").val().trim(),
                requestID: $("#requestID").val().trim(),
                label: $("#label").val().trim(),
                contractTypeID: $("#contractTypeID").val().trim(),
                contractID: $("#contractID").val().trim(),                
            }
            console.log('{"ABC":' + JSON.stringify(data) + '}')
               ....

        })
    })

Los resultados JSON con lo siguiente:

{
    "name": "Demo",
    "REQID": "1234aa",
    "label": "123",
    "contractTypeID": "321",
    "contractID": "1234",
}

Pero, necesito un resultado para formatearlo así:

{
   "ABC":{
      "name":"Demo",
      "REQID":"1234aa",
      "Group":{
         "label":"123",
         "contractTypeID":"321",
         "contractID":"1234"
      }
   }
}

¿Hay una manera simple de lograr esto o tendré que codificar el resultado?

0
Alex 29 oct. 2019 a las 23:57

3 respuestas

La mejor respuesta

Si está utilizando la clave arbitraria "ABC" según su ejemplo, puede envolver su estructura data en ese objeto padre predefinido:

var data = {
  "name": "Demo",
  "REQID": "1234aa",
  "label": "123",
  "contractTypeID": "321",
  "contractID": "1234",
};

var modifiedData = {

  "ABC": {
    "name": data.name,
    "REQID": data.REQID,
    "Group": {
      "label": data.label,
      "contractTypeID": data.contractTypeID,
      "contractID": data.contractID
    }
  }

};

console.log(modifiedData);
1
esqew 29 oct. 2019 a las 21:30

Tratar

var data = { 
  ABC: {
    name: $("#name").val().trim(),
    REQID: $("#requestID").val().trim(),
    Group: {
      label: $("#label").val().trim(),
      contractTypeID: $("#contractTypeID").val().trim(),
      contractID: $("#contractID").val().trim(),                
    }
  }
}

console.log(JSON.stringify(data))
1
Kamil Kiełczewski 29 oct. 2019 a las 21:30

Hay algunas formas de hacer esto. Otra forma es construir su objeto javascript en etapas como esta:

var data = { ABC: { Group: {}}};
data.ABC.name = 'Demo';
data.ABC.REQID = '1234aa';
data.ABC.Group.label = '123';
data.ABC.Group.contractTypeID = '321';
data.ABC.Group.contractID = '1234';

console.log(JSON.stringify(data));

Solo recuerde que los objetos javascript no admiten orden como lo hacen las matrices javascript, por lo que no se verá exactamente como lo especificó, pero esto produce el objeto que especificó.

Aquí hay un violín de trabajo.

1
Ananda Masri 29 oct. 2019 a las 21:51