Yes, this is true for now. JSONEncoder uses JSONSerialization to serialize into JSON, and JSONSerialization requires the top-level values to not be fragments (i.e. they must be containers).
If you can, please file a bug and we can consider expanding this, either at the JSONSerialization or JSONEncoder level.
This seems like it might not be such a trivial update to .allowFragments since encoding/decoding requires the existence of containers. Though you might consider this case to use a singleValueContainer. Let's at least start discussing this again.
Yes, @bendjones has worked on this internally, though this is not aligned with Swift 5 proper. No specific promises, but we’d like to land this in the Swift 5.x timeframe.