Don’t make consumers look inside the value to determine the type. Pass an object with explicit type and value keys. Or even an object with a single key, the type, ie:
Typing on my phone, apologies for formatting. Basically pass an object that the consumer can quickly identify as a serialized string so it can pass it to the appropriate code to deserialize it.
With this approach, you decouple the recognition of special value types from the deserialization, avoid making the deserializers parse your prefix, and the idea is extensible to any type that doesn’t have an intrinsic format in JSON.
Another example based on a similar idea.