I don't see the value in using JSON to round-trip from Python to the same Python code.
There is a bit of a value: it's a human-readable format that matches the Python Data model pretty well. I've used it for that reason. Maybe I should be using yaml or something instead, but it's nice to use something common.
I have thought about using "PYSON" -- which would better match the Python data model, but never got around to formalizing that.
But yes, the real advantage to JSON is interaction with non-python systems.
External schema is far more useful than embedding part of an ad-hoc nested object schema in type annotations that can't also do or even specify data validations.
NOTE: JSON-LD keeps coming up in these thrteads, but that really seems like an orthogonal issue. Maybe there should be JSON-LD support for Python (is there already?) but that shouldn't impact the core json library, nor a __json__ magic method.