# pydantic_core._pydantic_core.ValidationError: 1 个验证错误，字段 database_urls 输入应为有效列表 [type=list_type]

- **ID:** `python/pydantic-settings-env-parse-json`
- **领域:** python
- **类别:** config_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

pydantic-settings 默认将环境变量作为字符串解析。当列表类型字段从环境变量填充时，JSON 字符串不会自动解码，除非字段被标注为复杂解析。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 2.x | active | — | — |

## 解决方案

1. **** (90% 成功率)
   ```
   from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import field_validator
import json

class AppSettings(BaseSettings):
    model_config = SettingsConfigDict(env_file='.env')
    database_urls: list[str]

    @field_validator('database_urls', mode='before')
    @classmethod
    def parse_json(cls, v):
        if isinstance(v, str):
            return json.loads(v)
        return v
   ```
2. **** (75% 成功率)
   ```
   from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field

class AppSettings(BaseSettings):
    database_urls: list[str] = Field(default_factory=list)
   ```

## 无效尝试

- **** — These settings control None handling and variable naming, not JSON decoding of complex types. (85% 失败率)
- **** — The validator receives the raw string before type coercion, so isinstance(v, list) is False and the error is re-raised. (70% 失败率)
