There is currently no way to modify the actual text of a JSON text element. All you can do is change its color and other formatting.
One possible option would be a resource pack that replaces all lowercase letters with uppercase ones. Obviously, this would make it impossible to have lowercase letters anywhere in the game, unless you replaced another set of characters with lowercase letters and used those instead (i.e., replace £
with a
and so on).
Updated as of 1.16:
With resource packs, you can add custom fonts. This would let you add an "uppercase" font and use it for the player name:
{"selector":"@p","bold":true,"italic":true,"color":"dark_purple","font":"your_namespace:uppercase"}