When performing information extraction or structured data generation tasks, a model may return extra text (such as ```json ) that breaks downstream parsing. Enabling structured output ensures the model returns a valid JSON string. The JSON Schema mode also gives you precise control over the output structure and types, eliminating extra validation or retries.
Usage
Structured output supports two modes: JSON Object and JSON Schema.
-
JSON Object mode: Ensures the output is a valid JSON string, but does not guarantee a specific structure. Usage:
- Set the
response_formatparameter: In the request body, setresponse_formatto{"type": "json_object"}. - Include the JSON keyword in your prompt: The system message or user message must contain the word "JSON" (case-insensitive), otherwise the API returns:
'messages' must contain the word 'json' in some form, to use 'response_format' of type 'json_object'.
- Set the
-
JSON Schema mode: Ensures the output conforms to a specified structure. Usage: set
response_formatto{"type": "json_schema", "json_schema": {..., "strict": true}}.No JSON keyword required in the prompt.
Feature | JSON Object mode | JSON Schema mode |
|---|---|---|
Outputs valid JSON | Yes | Yes |
Strictly follows schema | No | Yes |
Supported models | Most Qwen models | Only selected qwen-plus models |
|
|
|
Prompt requirement | Must include "JSON" | Recommended to describe explicitly |
Use case | Flexible JSON output | Precise schema validation |
Supported models
- JSON Object
- JSON Schema
- Qwen
- Kimi
- GLM
- DeepSeek
-
Text generation models
- Qwen-Max: Qwen3.8-Max series, Qwen3.7-Max series
- Qwen-Max (non-thinking mode): Qwen3.6-Max series, Qwen3-Max series, Qwen-Max series
- Qwen-Plus: Qwen3.7-Plus series
- Qwen-Plus (non-thinking mode): Qwen3.6-Plus series, Qwen3.5-Plus series, Qwen-Plus series
- Qwen-Flash: Qwen3.8-Flash series, Qwen3.7-Flash series
- Qwen-Flash (non-thinking mode): Qwen3.6-Flash series, Qwen3.5-Flash series, Qwen-Flash series
- Qwen-Turbo (non-thinking mode): Qwen-Turbo series
- Qwen-Coder: Qwen3-Coder series
- Qwen-Long: Qwen-Long series
- Qwen3.8 open-source series
- Qwen3.6 open-source series (non-thinking mode)
- Qwen3.5 open-source series (non-thinking mode)
- Qwen3 open-source series (non-thinking mode)
- Qwen3-Coder open-source series
- Qwen2.5 open-source series (excluding math and coder models)
-
Multimodal models
- Qwen-VL (non-thinking mode): Qwen3-VL-Plus series, Qwen3-VL-Flash series, Qwen-VL-Max series (excluding the latest and snapshot versions), Qwen-VL-Plus series (excluding the latest and snapshot versions)
- Qwen-Omni: Qwen3.5-Omni-Plus series
- Qwen3-VL open-source series (non-thinking mode)
response_format set to {"type": "json_object"} in thinking mode without error, but some may return content that is not strictly valid JSON; if you need reliably valid JSON, see the FAQ.Getting started
This example extracts structured information from a personal profile.
JSON Object mode does not guarantee stable key names or field types. Results may vary across different prompts or calls. To enforce a fixed structure, use JSON Schema mode.Obtain an API key and export the API key as an environment variable. If you use the OpenAI SDK or DashScope SDK to make calls, install the SDK.
- OpenAI compatible
- DashScope
- Python
- Node.js
- curl
Response
Image and video data processing
Multimodal models also support structured output for images and videos. Use JSON mode to extract structured data from visual content, such as field values from receipts, object locations in images, or events in video.
For image and video file limits, see Image and video understanding .
- OpenAI compatible
- DashScope
- Python
- Node.js
- curl
Response
Optimize prompts
Ambiguous prompts like "return user information" lead to unpredictable output structures. For reliable results, describe the expected schema in your prompt: specify field names, types, required vs. optional status, format constraints (such as date format), and include examples.
- OpenAI compatible
- DashScope
- Python
- Node.js
Response
Getting structured output
Setting response_format type to json_object returns a valid JSON string, but the structure may not match your expectations - suitable for simple scenarios. For automated parsing, API interoperability, and other complex scenarios requiring strict type constraints, set type to json_schema to force the model to output content that strictly conforms to a specified format. The response_format format and example:
name and age) and an optional email field.
Singapore region models are not supported yet.
How to use
With the OpenAI SDK parse method, you can pass a Python Pydantic class or Node.js Zod object directly. The SDK automatically converts it to a JSON Schema - no need to write complex JSON manually. For the DashScope SDK, construct the JSON Schema manually following the format above.
- OpenAI compatible
- DashScope
Python
Node.js
Configuration guide
Follow these guidelines when using JSON Schema for more reliable structured output:
-
Required field declaration
It is recommended to list required fields in the
requiredarray. Optional fields can be omitted, for example:
-
Implementing optional fields
Besides omitting from
required, you can also allow thenulltype:
email field, but its value may be null.
- additionalProperties configuration Controls whether to allow extra fields not defined in the schema:
"I'm Zhang San, 25 years old"; output: {"name": "Zhang San", "age": 25} (includes the undefined age field).
Value | Behavior | Use case |
|---|---|---|
| Only output defined fields | Precise structure control |
| Allow extra fields | Capture more information |
- Supported data types: string, number, integer, boolean, object, array, enum.
Going live
- Validate before passing downstream When using JSON Object mode, validate the output before passing it to downstream services. Use a library such as jsonschema (Python), Ajv (JavaScript), or Everit (Java) to ensure it conforms to the expected JSON Schema, preventing downstream parsing failures, data loss, or business logic disruptions due to missing fields, type errors, or malformed formats. On failure, retry the request or use a model to rewrite the output.
-
Do not set max_tokens
Do not set
max_tokenswhen structured output is enabled. This parameter caps the number of output tokens and defaults to the model's maximum. Setting it may truncate the JSON string mid-output, producing invalid JSON that fails to parse. -
Use SDK to generate schemas
Use the SDK to auto-generate schemas. This avoids errors from manual maintenance and provides automatic validation and parsing.
Python
FAQ
Q: How does Qwen's thinking mode model produce structured output?
Models labeled "non-thinking mode" returns content that is not a strictly valid JSON string in thinking mode, you can use the following two-step approach to fix it: first call the thinking model to get high-quality output, then pass any malformed JSON through a model that supports JSON mode to fix it.
-
Get output from the thinking mode model
Call the thinking mode model. The result may not be valid JSON.
Note: setting the
response_formatparameter to{"type": "json_object"}when thinking mode is enabled does not cause an error. The following is a fallback example that intentionally omitsresponse_format; use it only to fix cases where a model's output is not valid JSON.
-
Validate and fix the output
Try to parse the
json_stringfrom the previous step:- If the model returned valid JSON, parse and use it directly.
- If the model returned invalid JSON, call a model that supports structured output (a fast, low-cost model such as qwen-flash in non-thinking mode works well) to fix the format.