Domanda

Sto lavorando su un progetto in PHP (5.3.1) dove ho bisogno di inviare una stringa JSON ad un webservice (in Python), ma il risultato che ricevo da json_encode non passa come JSON valido (i' m utilizzando JSLint per controllare la validità).

Vorrei aggiungere che la struttura che sto cercando di codificare è abbastanza grande (13K codificata), e consiste in parte dei dati UTF8, e mentre lo fa json_encode gestirlo, ottengo gli spazi in luoghi strani nel risultato. Per esempio, ho potuto ottenere { "ciao": tru e} o { "inferno o": true}. Che si traduce in un errore dal webservice dal momento che il JSON è valido (o dati, come nel secondo esempio)

Ho anche provato ad utilizzare Zend Framework per la codifica JSON, ma che non ha fatto molto diversa.

C'è un problema noto con JSON in PHP? Qualcuno incontro che il comportamento e ha trovato una soluzione?

È stato utile?

Soluzione 3

I stava gestendo alcune email generate automaticamente l'altro giorno e ho notato lo stesso comportamento strano (gli spazi sono stati inseriti per il corpo e-mail), così ho iniziato a controllare la posta e-mail e ho trovato il colpevole:

Dal RFC2821 SMTP:

  

La lunghezza complessiva massima di un testo   linea compreso il 1000   caratteri (senza contare il leader   dot duplicato per la trasparenza).

Il mio corpo e-mail era in effetti in una linea, in modo da rompere con risolto il problema spazi \ di n.

Altri suggerimenti

Si affermano che "la struttura che sto cercando di codificare ... è costituito in parte dei dati UTF8." Ciò implica che è anche parzialmente di dati non UTF8. Il json_encode doc ha un commento in fondo, che

  

json_encode () si aspetta stringhe da codificare essere in formato UTF-8, mentre per default stringhe PHP sono ISO-8859-1 codifica.   Questo significa che

     

json_encode (array ( 'au'));

     

produrrà una rappresentazione JSON di una stringa vuota, mentre

     

json_encode (array (utf8_encode ( 'au')));

     

funzionerà.

sono i segmenti in mancanza del JSON a causa di ingresso non-UTF8?

Per che i codici di oggetti non possono contenere spazi o caratteri non Unicode, le variabili non quotate può essere solo booleano, integer, float, oggetto e il valore di array, stringhe dovrebbe sempre essere citato.

Inoltre, vi consiglio di aggiungere corretta intestazione prima uscita JSON.

if(!headers_sent())
   header('Content-Type: application/json; charset=utf-8', true,200);

Si può anche pubblicare il tuo array o oggetto che si passa a json_encode?

Dopo graffiare la mia testa per quasi un giorno, sono giunto alla conclusione che il problema non era nella funzione json_encode. E 'stato con la mia funzione di posta.

In sostanza, il json_encode stava preparando i dati da inviare a un altro servizio. Prima di oggi, ho usato stream_context_create e fopen per inviare i dati al servizio esterno, ma ora io uso fsockopen e fputs e sembra funzionare.

Anche se io sono sicuro per quanto riguarda la natura del problema, sono felice ora funziona:)

A proposito: Dopo questo processo, io spedisco io l'ingresso e l'uscita (sia in JSON) e questo è quanto ho visto che c'era un problema in primo luogo. Questo problema persiste, ma credo che sia correlato alla codifica della posta o qualcosa del genere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top