utf8 - ¿Alguien tiene problemas que van desde el método serializeJSON de ColdFusion al json_decode de PHP?
print json decode php (4)
¿Puedes replicar este problema de manera confiable? y si es así puedes publicar datos de muestra que devuelven null? Estoy seguro de que usted sabe esto, pero por cuestiones de información, para otros que tropiezan con esto que no, RFC 4627 describe JSON, y es un error común suponer que javascript válido es JSON válido. es mejor pensar en JSON como un subconjunto de javascript.
en respuesta a la edición:
Sugeriría verificar para asegurarse de que su información se rellene en su script PHP (antes de que se pase a json_decode), y también validar esa información (especialmente si puede reproducir el error de manera confiable). puede probar un validador en línea para mayor comodidad. en base a la información muy limitada, parece que quizás se está agotando el tiempo y no captando todos los datos. ¿Existe la necesidad de un conjunto de datos tan grande?
Los Interwebs no son de ayuda en este caso. Estamos codificando datos en ColdFusion usando serializeJSON
y tratando de decodificarlo en PHP usando json_decode
. La mayoría de las veces, esto funciona bien, pero en algunos casos, json_decode
devuelve NULL
. Hemos buscado a los culpables obvios, pero serializeJSON
parece estar formateando las cosas como se esperaba. ¿Qué otra cosa podría ser el problema?
ACTUALIZACIÓN: Un par de personas (sabiamente) me pidieron que publicara el resultado que está causando el problema. Lo haría, ¡excepto que acabamos de descubrir que el conjunto de resultados es todos nuestros datos (listando información de más de 2300 propiedades de alquiler para un total de 565.135 caracteres ASCII)! Eso podría ser un problema, aunque no vi nada en los documentos de PHP sobre un tamaño máximo para la cadena. ¿Cuál sería el factor limitante allí? ¿RAM?
ACTUALIZACIÓN II: Parece que el problema fue que algunos de nuestros usuarios copiaron y pegaron texto de Microsoft Word con comillas "inteligentes". Esos usuarios molestos ...
Podría intentar analizarlo con otro analizador y buscar un error. Sé que los analizadores JSON de Python son de muy alta calidad. Si tiene Python instalado, es bastante fácil ejecutar el texto a través del comprobador de sintaxis de demjson . Si se trata de un conjunto de datos muy grande, puede usar mi biblioteca jsonlib ; el uso de la memoria será mayor que con demjson, pero se ejecutará más rápido porque está escrito en C.
Podría intentar operar en UTF-8 y también dejar que PHP lo sepa.
Tuve un problema con json_decode
de PHP al no poder decodificar una cadena JSON UTF-8 (con algunos caracteres "extraños" además de las comillas que tiene). Mi solución fue dar pistas sobre PHP que estaba trabajando en el modo UTF-8 insertando una metaetiqueta de tipo de contenido en la página HTML que estaba enviando al PHP. De esta forma, el tipo de contenido de los datos enviados, que es la cadena JSON, también sería UTF-8:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
Después de eso, el json_decode
de PHP pudo decodificar correctamente la cadena.
Tuve este problema exacto y resultó que ColdFusion no puso caracteres imprimibles en los paquetes JSON (estos caracteres realmente existían en nuestros datos) pero no pueden entrar en JSON.
Dos preguntas en este sitio arreglaron este problema para mí, aunque opté por la solución PHP en lugar de la solución ColdFusion, ya que sentí que era la más elegante de las dos.
Arregle la cadena antes de pasarla a json_decode ()
$string = preg_replace(''/[/x00-/x1F/x80-/xFF]/'', '''', $string);
Use la función cleanXmlString () en esa pregunta SO después de usar serializeJSON ()