# pydantic_core._pydantic_core.ValidationError: 1 validation error for AppSettings
database_urls
  Input should be a valid list [type=list_type, input_value='["db1","db2"]', input_type=str]

- **ID:** `python/pydantic-settings-env-parse-json`
- **Domain:** python
- **Category:** config_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

pydantic-settings parses environment variables as strings by default. When a list-typed field is populated from an env var, the JSON string is not automatically decoded unless the field is annotated for complex parsing.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 2.x | active | — | — |

## Workarounds

1. **** (90% success)
   ```
   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% success)
   ```
   from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field

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

## Dead Ends

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