Почему json_encode превращает число в строку?
Потому что из PDO вернулась строка.
https://qna.habr.com/q/968945
Также вы можете использовать json_encode с флагом JSON_NUMERIC_CHECK

echo json_encode($result,  JSON_NUMERIC_CHECK);

json_encode online