Estoy tratando de lograr la siguiente creación dinámica de cadenas JSON. Puedo producir la parte de id pero no sé cómo producir la parte de name . Los ID son de la lista y el nombre es del cuadro de texto.
Intenté mucho pero nada parece funcionar. Quiero seleccionar ambas cadenas y el cuadro de texto debería resultar como se muestra a continuación.
{ "name": "GROUP-X1", "objects": [{ // this part is needed as a complete string "type": "Host", "id": "0050569A-7800-0ed3-0000-008589948757" }, { "type": "Host", "id": "0050569A-7800-0ed3-0000-008589945523" }] } var output = createJSON1(); function createJSON1() { var arr = $("#select1 > option").map((index, val) => ({ "type": "Host", id: val.value })).get(); return JSON.stringify(arr); } console.log(output); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="text" name="text" id="srch-obj" value="GROUP-X1"> <select id="select1" multiple size="2" style="width: 480px"> <option>0050569A-7800-0ed3-0000-008589948757</option> <option>0050569A-7800-0ed3-0000-008589945523</option> </select>Su código ya construye la matriz de objects . Como tal, todo lo que necesita hacer es envolver la salida dentro de otro objeto proporcionando la propiedad de name que puede recuperar del valor de #srch-obj . Prueba esto:
var output = createJSON1(); function createJSON1() { let obj = { name: $('#srch-obj').val(), objects: $("#select1 > option").map((t, el) => ({ type: "Host", id: el.value })).get() } return JSON.stringify(obj); } console.log(output); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="text" name="text" id="srch-obj" value="GROUP-X1"> <select id="select1" multiple size="2" style="width: 480px"> <option>0050569A-7800-0ed3-0000-008589948757</option> <option>0050569A-7800-0ed3-0000-008589945523</option> </select>