diff --git a/pydantic/json_schema.py b/pydantic/json_schema.py index 07a385f24a..c81a2899c3 100644 --- a/pydantic/json_schema.py +++ b/pydantic/json_schema.py @@ -2224,7 +2224,7 @@ def _sort_json_schema(value: JsonSchemaValue, parent_key: str | None = None) -> if isinstance(value, dict): sorted_dict: dict[str, JsonSchemaValue] = {} keys = value.keys() - if parent_key != 'properties': + if (parent_key != 'properties') and (parent_key != 'default'): keys = sorted(keys) for key in keys: sorted_dict[key] = _sort_json_schema(value[key], parent_key=key) @@ -2232,7 +2232,7 @@ def _sort_json_schema(value: JsonSchemaValue, parent_key: str | None = None) -> elif isinstance(value, list): sorted_list: list[JsonSchemaValue] = [] for item in value: # type: ignore - sorted_list.append(_sort_json_schema(item)) + sorted_list.append(_sort_json_schema(item, parent_key)) return sorted_list # type: ignore else: return value diff --git a/tests/test_json_schema.py b/tests/test_json_schema.py index 397b65ef17..105732eb43 100644 --- a/tests/test_json_schema.py +++ b/tests/test_json_schema.py @@ -5260,7 +5260,7 @@ class Model(BaseModel): a: str class OuterModel(BaseModel): - inner: List[Model] + inner: List[Model] = Field(default=[Model(b=1, a='fruit')]) # verify the schema contents # this is just to get a nicer error message / diff if it fails @@ -5273,8 +5273,14 @@ class OuterModel(BaseModel): 'type': 'object', } }, - 'properties': {'inner': {'items': {'$ref': '#/$defs/Model'}, 'title': 'Inner', 'type': 'array'}}, - 'required': ['inner'], + 'properties': { + 'inner': { + 'default': [{'b': 1, 'a': 'fruit'}], + 'items': {'$ref': '#/$defs/Model'}, + 'title': 'Inner', + 'type': 'array', + } + }, 'title': 'OuterModel', 'type': 'object', }