Eu fiz um teste muito rápido:
$a = array(
'id' => 152,
'another' => 'test',
'ananother' => 456,
);
$json = json_encode($a);
echo $json;
Parece ser o que você descreve, se não me engano?
E eu estou recebendo como saída:
{"id":152,"another":"test","ananother":456}
Portanto, nesse caso, os números inteiros não foram convertidos em string.
Ainda assim, isso pode ser dependente da versão do PHP que estamos usando: houve alguns bugs relacionados ao json_encode corrigidos, dependendo da versão do PHP ...
Este teste foi feito com o PHP 5.2.6; Estou recebendo a mesma coisa com o PHP 5.2.9 e 5.3.0; Eu não tenho outra versão 5.2.x para testar, no entanto :-(
Qual versão do PHP você está usando? Ou seu caso de teste é mais complexo que o exemplo que você postou?
Talvez um relatório de erro em http://bugs.php.net/ possa estar relacionado? Por exemplo, Bug # 40503: a conversão de número inteiro json_encode é inconsistente com o PHP ?
Talvez o bug # 38680 também pudesse interessá-lo, btw?