<!-- Thank you for your contribution! -->
<!-- Unless your change is trivial, please create an issue to discuss the change before creating a PR -->

## Change Summary

Adds these types:

```python
JsonValue: TypeAlias = int | float | str | bool | None | List['JsonValue'] | 'JsonDict'
JsonDict: TypeAlias = Dict[str, JsonValue]
```

and replaces `dict[str, object]` with `JsonDict` on annotations of `json_schema_extra`.

## Related issue number

Closes https://github.com/pydantic/pydantic/issues/6348

Replaces https://github.com/pydantic/pydantic/pull/7475 which seems to have died and implements the suggestions.

<!-- WARNING: please use "fix #123" style references so the issue is closed when this PR is merged. -->

## Checklist

* [x] The pull request title is a good summary of the changes - it will be used in the changelog
* [x] Unit tests for the changes exist
* [x] Tests pass on CI
* [x] Documentation reflects the changes where applicable
* [x] My PR is ready to review, **please add a comment including the phrase "please review" to assign reviewers**


Selected Reviewer: @lig
Add more specific type for non-callable `json_schema_extra`. <!-- Thank you for your contribution! -->
<!-- Unless your change is trivial, please create an issue to discuss the change before creating a PR -->

## Change Summary

Adds these types:

```python
JsonValue: TypeAlias = int | float | str | bool | None | List['JsonValue'] | 'JsonDict'
JsonDict: TypeAlias = Dict[str, JsonValue]
```

and replaces `dict[str, object]` with `JsonDict` on annotations of `json_schema_extra`.

## Related issue number

Closes https://github.com/pydantic/pydantic/issues/6348

Replaces https://github.com/pydantic/pydantic/pull/7475 which seems to have died and implements the suggestions.

<!-- WARNING: please use "fix #123" style references so the issue is closed when this PR is merged. -->

## Checklist

* [x] The pull request title is a good summary of the changes - it will be used in the changelog
* [x] Unit tests for the changes exist
* [x] Tests pass on CI
* [x] Documentation reflects the changes where applicable
* [x] My PR is ready to review, **please add a comment including the phrase "please review" to assign reviewers**


Selected Reviewer: @lig
<!-- DO NOT EDIT MANUALLY: Generated by tests/test_docs.py::test_docs_devtools_example for use in docs -->
<span class="ansi35">devtools_example.py</span>:<span class="ansi32">31</span> <span class="ansi3 ansi32">&lt;module&gt;</span>
    <span class="ansi34">user</span>: <span class="ansi38-252">User</span><span class="ansi38-252">(</span>
<span class="ansi38-252">        </span><span class="ansi38-5">id</span><span class="ansi38-68">=</span><span class="ansi38-5">123</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">name</span><span class="ansi38-68">=</span><span class="ansi38-1">'</span><span class="ansi38-1">John Doe</span><span class="ansi38-1">'</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">signup_ts</span><span class="ansi38-68">=</span><span class="ansi38-252">datetime</span><span class="ansi38-68">.</span><span class="ansi38-252">datetime</span><span class="ansi38-252">(</span><span class="ansi38-5">2019</span><span class="ansi38-252">,</span><span class="ansi38-252"> </span><span class="ansi38-5">6</span><span class="ansi38-252">,</span><span class="ansi38-252"> </span><span class="ansi38-5">1</span><span class="ansi38-252">,</span><span class="ansi38-252"> </span><span class="ansi38-5">12</span><span class="ansi38-252">,</span><span class="ansi38-252"> </span><span class="ansi38-5">22</span><span class="ansi38-252">)</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">friends</span><span class="ansi38-68">=</span><span class="ansi38-252">[</span>
<span class="ansi38-252">            </span><span class="ansi38-5">1234</span><span class="ansi38-252">,</span>
<span class="ansi38-252">            </span><span class="ansi38-5">4567</span><span class="ansi38-252">,</span>
<span class="ansi38-252">            </span><span class="ansi38-5">7890</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">]</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">address</span><span class="ansi38-68">=</span><span class="ansi38-252">Address</span><span class="ansi38-252">(</span>
<span class="ansi38-252">            </span><span class="ansi38-252">street</span><span class="ansi38-68">=</span><span class="ansi38-1">'</span><span class="ansi38-1">Testing</span><span class="ansi38-1">'</span><span class="ansi38-252">,</span>
<span class="ansi38-252">            </span><span class="ansi38-252">country</span><span class="ansi38-68">=</span><span class="ansi38-1">'</span><span class="ansi38-1">uk</span><span class="ansi38-1">'</span><span class="ansi38-252">,</span>
<span class="ansi38-252">            </span><span class="ansi38-252">lat</span><span class="ansi38-68">=</span><span class="ansi38-5">51.5</span><span class="ansi38-252">,</span>
<span class="ansi38-252">            </span><span class="ansi38-252">lng</span><span class="ansi38-68">=</span><span class="ansi38-5">0.0</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">)</span><span class="ansi38-252">,</span>
<span class="ansi38-252">    </span><span class="ansi38-252">)</span><span class="ansi2"> (User)</span>

should be much easier read than:

user: id=123 name='John Doe' signup_ts=datetime.datetime(2019, 6, 1, 12, 22) friends=[1234, 4567, 7890] address=Address(street='Testing', country='uk', lat=51.5, lng=0.0)

<!-- DO NOT EDIT MANUALLY: Generated by tests/test_docs.py::test_docs_devtools_example for use in docs -->
<span class="ansi35">devtools_example.py</span>:<span class="ansi32">31</span> <span class="ansi3 ansi32">&lt;module&gt;</span>
    <span class="ansi34">user</span>: <span class="ansi38-252">User</span><span class="ansi38-252">(</span>
<span class="ansi38-252">        </span><span class="ansi38-5">id</span><span class="ansi38-68">=</span><span class="ansi38-5">123</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">name</span><span class="ansi38-68">=</span><span class="ansi38-1">'</span><span class="ansi38-1">John Doe</span><span class="ansi38-1">'</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">signup_ts</span><span class="ansi38-68">=</span><span class="ansi38-252">datetime</span><span class="ansi38-68">.</span><span class="ansi38-252">datetime</span><span class="ansi38-252">(</span><span class="ansi38-5">2019</span><span class="ansi38-252">,</span><span class="ansi38-252"> </span><span class="ansi38-5">6</span><span class="ansi38-252">,</span><span class="ansi38-252"> </span><span class="ansi38-5">1</span><span class="ansi38-252">,</span><span class="ansi38-252"> </span><span class="ansi38-5">12</span><span class="ansi38-252">,</span><span class="ansi38-252"> </span><span class="ansi38-5">22</span><span class="ansi38-252">)</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">friends</span><span class="ansi38-68">=</span><span class="ansi38-252">[</span>
<span class="ansi38-252">            </span><span class="ansi38-5">1234</span><span class="ansi38-252">,</span>
<span class="ansi38-252">            </span><span class="ansi38-5">4567</span><span class="ansi38-252">,</span>
<span class="ansi38-252">            </span><span class="ansi38-5">7890</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">]</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">address</span><span class="ansi38-68">=</span><span class="ansi38-252">Address</span><span class="ansi38-252">(</span>
<span class="ansi38-252">            </span><span class="ansi38-252">street</span><span class="ansi38-68">=</span><span class="ansi38-1">'</span><span class="ansi38-1">Testing</span><span class="ansi38-1">'</span><span class="ansi38-252">,</span>
<span class="ansi38-252">            </span><span class="ansi38-252">country</span><span class="ansi38-68">=</span><span class="ansi38-1">'</span><span class="ansi38-1">uk</span><span class="ansi38-1">'</span><span class="ansi38-252">,</span>
<span class="ansi38-252">            </span><span class="ansi38-252">lat</span><span class="ansi38-68">=</span><span class="ansi38-5">51.5</span><span class="ansi38-252">,</span>
<span class="ansi38-252">            </span><span class="ansi38-252">lng</span><span class="ansi38-68">=</span><span class="ansi38-5">0.0</span><span class="ansi38-252">,</span>
<span class="ansi38-252">        </span><span class="ansi38-252">)</span><span class="ansi38-252">,</span>
<span class="ansi38-252">    </span><span class="ansi38-252">)</span><span class="ansi2"> (User)</span>

should be much easier read than:

user: id=123 name='John Doe' signup_ts=datetime.datetime(2019, 6, 1, 12, 22) friends=[1234, 4567, 7890] address=Address(street='Testing', country='uk', lat=51.5, lng=0.0)
