When testing out Blindbit oracle as a backend, we just convert the utxo array into a map and then loop over the values. That has the same structure as the json you posted. It could be simplified by removing txid
from the output struct.
If not using blindbit, we use a BIP158 client and request the full block, so that has the complete transaction structure.