Ho fatto un test molto veloce:
$a = array(
'id' => 152,
'another' => 'test',
'ananother' => 456,
);
$json = json_encode($a);
echo $json;
Questo sembra essere come quello che descrivi, se non sbaglio?
E sto ottenendo come output:
{"id":152,"another":"test","ananother":456}
Quindi, in questo caso, gli interi non sono stati convertiti in stringa.
Tuttavia, ciò potrebbe dipendere dalla versione di PHP che stiamo usando: sono stati corretti un paio di bug relativi a json_encode, a seconda della versione di PHP ...
Questo test è stato effettuato con PHP 5.2.6; Sto ottenendo la stessa cosa con PHP 5.2.9 e 5.3.0; Non ho un'altra versione 5.2.x con cui testare, però :-(
Quale versione di PHP stai usando? O il tuo caso di prova è più complesso dell'esempio che hai pubblicato?
Forse una segnalazione di bug su http://bugs.php.net/ potrebbe essere correlata? Ad esempio, Bug # 40503: la conversione di numeri interi json_encode non è coerente con PHP ?
Forse il Bug # 38680 potrebbe interessarti anche tu, a proposito?