listunspent bitcoin core command returns the address as String while getrawtransaction addresses are array this answers why vout.scriptPubKey.addresses is an array,

then why the address in listunspent response is a String?

Do you know any transactions in the blockchain have multi addresses in the vout?
This is a historical oddity.

In the past, Bitcoin Core would report the list of participating keys in a multisig addresses by listing the addresses for those keys. This was both confusing (addresses and keys are distinct things), but also unreliable, as the full public keys were not always knowm (when P2Sh was introduced). You can  safely assume you won't see multiple addresses in any output to an address created in modern times.