Qualcuno ha problemi che vanno dal metodo serializeJSON di ColdFusion al json_decode di PHP?

Gli Interwebs non sono d'aiuto su questo. Stiamo codificando i dati in ColdFusion usando serializeJSON e cercando di decodificarli in PHP usando json_decode . La maggior parte delle volte funziona json_decode , ma in alcuni casi, json_decode restituisce NULL . Abbiamo cercato gli ovvi colpevoli, ma serializeJSON sembra che stia formattando le cose come previsto. Cos'altro potrebbe essere il problema?

AGGIORNAMENTO: un paio di persone (saggiamente) mi hanno chiesto di pubblicare l'output che causa il problema. Lo farei, tranne che abbiamo appena scoperto che il set di risultati è costituito da tutti i nostri dati (informazioni sulla quotazione per oltre 2300 properties; in affitto per un totale di 565.135 caratteri ASCII)! Questo potrebbe essere un problema, anche se non ho visto nulla nei documenti PHP su una dimensione massima per la string. Quale sarebbe il fattore limitante lì? RAM?

AGGIORNAMENTO II: Sembra che il problema fosse che un paio di nostri utenti avevano copiato e incollato il text di Microsoft Word con virgolette "intelligenti". Quei utenti fastidiosi …

Potresti provare a operare in UTF-8 e far sapere a PHP questo fatto.

Ho avuto un problema con il json_decode di PHP che non era in grado di decodificare una string JSON UTF-8 (con alcuni caratteri "strani" oltre alle virgolette ricurve che hai). La mia soluzione era di suggerire a PHP che stavo lavorando in modalità UTF-8 inserendo un meta tag Content-Type nella pagina HTML che stava facendo l'invio al PHP. In questo modo il tipo di contenuto dei dati inviati, che è la string JSON, sarebbe anche UTF-8:

 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> 

Dopodiché, json_decode di PHP è stato in grado di decodificare correttamente la string.

puoi replicare questo problema in modo affidabile? e in tal caso puoi pubblicare dati di esempio che restituiscono null? sono sicuro che lo sai, ma per ragioni informative per gli altri che inciampano su questo che potrebbe non farlo, RFC 4627 descrive JSON, ed è un errore comune assumere che javascript valido sia JSON valido. è meglio pensare a JSON come sottoinsieme di javascript.

in risposta alla modifica:

Suggerirei di verificare che le vostre informazioni vengano inserite nello script PHP (prima che vengano passate a json_decode) e che convalidino anche queste informazioni (specialmente se potete riprodurre in modo affidabile l'errore). puoi provare un validatore online per comodità. sulla base delle informazioni molto limitate suona come forse è il tempismo e non afferrare tutti i dati? c'è bisogno di un set di dati così grande?

Ho avuto questo problema esatto e si scopre che era dovuto a ColdFusion che non metteva alcun carattere printingbile nei pacchetti JSON (questi caratteri erano effettivamente presenti nei nostri dati) ma non potevano entrare in JSON.

Due domande su questo sito hanno risolto questo problema per me, anche se ho optato per la soluzione PHP piuttosto che per la soluzione ColdFusion in quanto ritenevo che fosse la più elegante delle due.

Soluzione PHP

Correggi la string prima di passarla a json_decode ()

 $string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string); 

Soluzione ColdFusion

Usa la function cleanXmlString () in quella domanda SO dopo aver usato serializeJSON ()

Potresti provare ad analizzarlo con un altro parser e cercare un errore – So che i parser JSON di Python sono di altissima qualità. Se hai installato Python è abbastanza facile eseguire il text tramite il controllo della syntax di Demjson . Se si tratta di un set di dati molto grande, è ansible utilizzare la mia libreria jsonlib – l'utilizzo della memory sarà maggiore rispetto a demjson, ma verrà eseguito più velocemente perché è scritto in C.