2014-04-18 19 views
7

hey ragazzi ho bisogno di aiuto Ho una query mysql consente di dire:Mysql/PHP/json_encode conversione di stringhe booleano

SELECT cca_id AS id, cca_title AS text,IF((SELECT count(*) from crm_categories WHERE cca_id_prev = id),'TRUE','FALSE') AS children FROM crm_categories WHERE...

Ora ho una matrice indietro con vero/falso come una stringa

se io uso json_encode il risultato è come {"id":"false"}

ma ho bisogno di vero/falso senza virgolette - il problema è che se io uso vero falso nella query mysql come un valore booleano restituisce 0/1 - ma io don' t wa nt che sia ...

Naturalmente posso eseguire un str_replace per la stringa JSON - ma penso che ci siano alternative non è vero?

+0

come hai intenzione di usare il booleano? in JavaScript? – adamS

+0

uso jstree e jstree richiede una notazione come {"children": false} – sintakonte

+0

Se si utilizza php si può fare come: $ result [] ['children'] = $ data ['children']? vero falso; Cosa ne pensi? –

risposta

7

Bene, si sono selezionando dal database come stringa. Ecco cosa viene codificato. Utilizzare SQL true/false valori booleani, che in PHP diventano 0/1, e li getteranno a booleani PHP prima di JSON codificarli:

$data['id'] = (bool)$data['id']; // 0/1 -> PHP false/true 

echo json_encode($data); // {'id':true} 
+0

sì, in questo caso devo ripetere anche l'array - ma immagino che tu abbia ragione - questa sembra la soluzione migliore per ora – sintakonte

-1

Il problema qui è che i dati restituiti da MySQL è una stringa, non un booleano. Se si sa che si sta andando sempre essere 'vero' o 'falso', è possibile confrontare con una stringa letterale per ottenere il tipo corretto:

$row = $stmt->fetch(PDO::FETCH_ASSOC); 
$boolval = ($row['boolval'] === 'true'); 

E poi, quando è json_encoded() lo farà essere rappresentato come un booleano primitivo, anziché una stringa.

Problemi correlati