0

Como puedo solucionar el error:

Uncaught SyntaxError: Unexpected token , in JSON at position 49

Me ocurre luego de recibir un archivo json que muestro mas abajo:

["{\"descripcion\":\"clavos\",\"codprod\":0,\"Stock\":\"28\"}","{\"descripcion\":\"tornillos\",\"codprod\":1,\"Stock\":\"28\"}","{\"descripcion\":\"martillos\",\"codprod\":2,\"Stock\":\"28\"}"]

Este el código que tengo en JQuery:

selectproducto.addEventListener('focus', () => {
    $.getJSON("obtiene_productos",function(datos){
        var selectproducto = document.getElementById("codigo_producto"); //Seleccionamos el select 
        var datos2=JSON.parse(datos);
        for( var i=0 ; i<= datos2.length;i++){ 
            var option = document.createElement("option"); //Creamos la opcion
            option.innerHTML = datos2[i].descripcion; //Metemos el texto en la opción
            selectproducto.appendChild(option); //Metemos la opción en el select                        
       }      
    });
});
Israel-ICM
  • 3,258
  • 17
  • 15
  • 25
user215287
  • 11
  • 1
  • El error quiere decir que el contenido del archivo no es compatible con JSON, **recuerda que [JSON y un objeto no son lo mismo](https://es.stackoverflow.com/questions/164943/cu%c3%a1l-es-la-diferencia-entre-json-y-un-objeto)** – Rodrigo Ramírez Mar 02 '21 at 14:49
  • lo que dices que es un json, en realidad es un array con un elemento, el cual es una cadena que PUEDES decodfiicar como json. (al menos, eso es lo que se interpreta con los corchetes inicial y final. Prueba a poner los [ ] dentro de las comillas y antes/despues de las llaves – Jakala Mar 02 '21 at 14:50
  • @Jakala tampoco, lo que nos está proporcionando es un array con varios "objetos" (porque tampoco lo son tal y como lo devuelve), debería incluir una llave que los englobe a todos. – Zander Mar 02 '21 at 14:59
  • tienes razon @Zander, me he expresado mal antes. Queria decir eso, que es un array con varias "cadenas" (objetos) que puede decodificar como json. Pero en si, el problema es que no es un json correcto (si es lo que esta recibiendo de un servicio externo) – Jakala Mar 02 '21 at 15:09

2 Answers2

0

Prueba a recorrer con un loop el array de elementos, y "parsearlos" en el interior. Quedaría algo así:

let jsonn = ["{\"descripcion\":\"clavos\",\"codprod\":0,\"Stock\":\"28\"}","{\"descripcion\":\"tornillos\",\"codprod\":1,\"Stock\":\"28\"}","{\"descripcion\":\"martillos\",\"codprod\":2,\"Stock\":\"28\"}"];
let selectproducto = document.getElementById("codigo_producto"); 
for(let i of jsonn){
    let item = JSON.parse(i);
    let option = document.createElement("option"); //Creamos la opcion
    option.innerHTML = item.descripcion; //Metemos el texto en la opción
    selectproducto.appendChild(option); //Metemos la opción en el select    
}
H. Díaz
  • 556
  • 2
  • 16
0
el json lo genero de manera dinámica 
  PrintWriter out=response.getWriter();
                    List<String>datosproducto=daoproducto.listarproducto();
                    JSONObject linea = new JSONObject();
                    JSONArray  arreglo = new JSONArray();
                    
                    
                    for (int i=0;i<datosproducto.size();i++) {
                           linea.put("codprod",i);
                           linea.put("descripcion",datosproducto.get(i));
                           linea.put("Stock","28");
                                                   
                           arreglo.add(linea.toJSONString());
                       }
                                       
                    
                    response.setContentType("application/json");
                    response.setCharacterEncoding("UTF-8");               
                    out.print(arreglo);
                    out.flush();
                   
user215287
  • 11
  • 1