Those are good points. The main motivation for using JSON was that not all inventory objects follow the same structure. My initial thought behind keeping the inventory data in a JSON object while in game was that the load on the server could be reduced by
1.) Not needing to regenerate the JSON object each time the inventory saves.
and
2.) Not needing to spawn a large number of actors each time a player logged in
I guess since each item is represented in a standard way regardless of their class, it would make sense to only replicate the items needed to the client though.