ma una query tipo questa (assolutamente non testata, prendila come un esempio)
SELECT a.*, AVG(b.voto) FROM oggetti a INNER JOIN voti.b on a.id = b.id GROUP BY a.id, b.id
non ti restituisce comunque i valori da trattare come preferisci (json o no)?

l'altra la vedo più macchinosa, devi mettere un livello di applicazione per gestire gli update della tabella