Non mi sono soffermato più di tanto, in quanto c'era l'altro errore, ma in genere quando si ha un array e lo si da in pasto alla funzione json_encode() funziona correttamente.