Implement a JSON value based textual component implementation.
This avoids the previous ugly hack of creating a JSON string as a JSON
value, and instead uses a map of keys to values within the JSON object
(still one level deep though).