¿Cómo puedo devolver una cadena con comillas dobles a un script de cliente para analizarla en objetos JSON?

Tengo un WebMethod al que JavaScript llama para obtener datos de una base de datos. La base de datos está fuera de los límites para esto, por lo que no puedo cambiar nada allí. Me gustaría hacer esto en JavaScript.

La cadena se ve así cuando llega al JavaScript:

"[{"id":"0", "value":"Avery Bradley"},{"id":"31", "value":"Jason "Jet" Terry"}]"

He intentado reemplazar ('\"', '\\\"') para agregar un carácter de escape. Lo hice funcionar en el lado .NET de esa manera Replace("\"", "\\\""). Sin embargo, este es un control autónomo que lo usará y esa validación debería estar allí.

¿Qué estoy haciendo mal?

función GetDataCallBack (childId, senderParam, senderValue, devolución de llamada) { var valores;

$.ajax({
    type: "POST",
    async: false,
    url: callback,
    data: "{'id': '" + childId + "', 'parameter': '" + senderParam + "', 'value': '" + senderValue + "'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (json) {
        values = json.d;
    }
});
return values;

}

preguntado el 27 de julio de 12 a las 18:07

Entonces, ¿qué hay entre la base de datos y el javascript? ¿HAY algún tipo de API que se pueda modificar para devolver JSON correctamente codificado? -

¿Puedes mostrarnos el código javascript que está obteniendo esta cadena? Eso puede ayudar, veamos qué se puede hacer. -

@MikeBrant El control se utilizará en varios productos. Quería codificarlo en JS para que no tuviera que agregarse a cada servicio web al que llama. -

@Yatrix Entonces, ¿espera que todos los servicios web a los que llama le devuelvan JSON mal formado? Esa es una especie de suposición extraña de hacer. Comenzaría con la suposición de que obtendría JSON correctamente formado y arreglaría esos servicios web donde no lo obtiene o personalizaría su manejo de respuesta JSON solo para esos servicios. -

@Yatrix No creo que esté mal en absoluto validar que haya formado JSON correctamente antes de continuar el proceso en el cliente. Personalmente, no intentaría ARREGLAR el JSON no válido en el cliente. Debería arreglarse en el servidor IMO. -

2 Respuestas

El problema está en el lado del servidor. Está sirviendo JSON no válido. Específicamente, esto dentro del último objeto de la matriz:

"value":"Jason "Jet" Terry"

Esas citas alrededor "Jet" hay que escapar. El servidor te está dando un JSON no válido.

Puede intentar corregir JSON roto, pero será confuso y probablemente imperfecto.

El lado del servidor debe corregirse para que sirva JSON válido.

Respondido 27 Jul 12, 18:07

Este parece ser el camino a seguir, por lo que estoy viendo. Soy nuevo en la arquitectura cliente/servidor, así que supuse que la forma en que estaba pensando sobre esto era incorrecta. - Yatrix

Creo que estás haciendo algo mal aquí. Un archivo JSON debe ser solo JSON y nada más. No debe ser una representación de cadena de JSON, que se analiza en cadena en una cadena y desde allí se analiza en un Objeto; solo trate el archivo/secuencia/lo que sea como la cadena.

Si necesita incrustar el JSON en algún marcado (XML, HTML), use los métodos de escape designados para ese idioma en la cadena JSON.

Si necesita incrustar el JSON en algún archivo de programa, intente usar una representación literal coincidente de los objetos codificados (muy fácil en Javascript, por ejemplo). Si usa un idioma que no tiene una buena representación, guárdelo en un archivo de texto adicional y léalo desde allí.

Respondido 27 Jul 12, 18:07

Obtengo datos de una base de datos a través de una llamada de servicio web y creo una cadena para devolverla al JavaScript que llama. ¿Cómo haría eso sin crear una cadena para devolver? - Yatrix

Sí, devuelve una cadena de JSON. No utilice cadenas de escape de la cadena JSON. - Bergi

Estoy confundido. ¿Cómo hago eso? Soy un novato web, lo siento. - Yatrix

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.