fix: skip JSON pre-parsing for str union annotations in pre_parse_json #2032
+38
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
pre_parse_json()usesfield_info.annotation is not strto decidewhether to attempt
json.loads()on string values. Forstr | None,the annotation is not identical to
str, so the check passes andstrings like
'{"key": "val"}'get parsed into dicts — then rejectedby Pydantic validation.
Replace the identity check with a helper that skips pre-parsing when
the union only contains simple types. Complex unions like
list[str] | Nonestill get pre-parsed.Closes #1873
Test plan
str | Nonepreserving JSON strings