Code nodes do not support returning objects that contain multidimensional arrays #20449

Closed
opened 2026-02-21 20:07:30 -05:00 by yindo · 1 comment
Owner

Originally created by @dimsky on GitHub (Nov 20, 2025).

Self Checks

  • I have read the Contributing Guide and Language Policy.
  • This is only for bug report, if you would like to ask a question, please head to Discussions.
  • I have searched for existing issues search for existing issues, including closed ones.
  • I confirm that I am using English to submit this report, otherwise it will be closed.
  • 【中文用户 & Non English User】请使用英语提交,否则会被关闭 :)
  • Please do not modify this template :) and fill in all the required fields.

Dify version

1.9.2

Cloud or Self Hosted

Self Hosted (Docker)

Steps to reproduce

Run failed: 'list' object has no attribute 'items'

Code nodes do not support returning objects that contain multidimensional arrays:

def main():
    obj = {
        "text": "testtest",
        "table": {
            "data": [
                [
                    "1",
                    "2",
                    "3",
                    "4"
                ],
                [
                    "one",
                    "two",
                    "tree",
                    "four"
                ]
            ]
        }
    }

    return {
        "result": obj,
    }

✔️ Expected Behavior

Able to return a python object normally

Actual Behavior

Run failed: 'list' object has no attribute 'items'

code test.ymll.yml

Originally created by @dimsky on GitHub (Nov 20, 2025). ### Self Checks - [x] I have read the [Contributing Guide](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) and [Language Policy](https://github.com/langgenius/dify/issues/1542). - [x] This is only for bug report, if you would like to ask a question, please head to [Discussions](https://github.com/langgenius/dify/discussions/categories/general). - [x] I have searched for existing issues [search for existing issues](https://github.com/langgenius/dify/issues), including closed ones. - [x] I confirm that I am using English to submit this report, otherwise it will be closed. - [x] 【中文用户 & Non English User】请使用英语提交,否则会被关闭 :) - [x] Please do not modify this template :) and fill in all the required fields. ### Dify version 1.9.2 ### Cloud or Self Hosted Self Hosted (Docker) ### Steps to reproduce Run failed: 'list' object has no attribute 'items' Code nodes do not support returning objects that contain multidimensional arrays: ```python def main(): obj = { "text": "testtest", "table": { "data": [ [ "1", "2", "3", "4" ], [ "one", "two", "tree", "four" ] ] } } return { "result": obj, } ``` ### ✔️ Expected Behavior Able to return a python object normally ### ❌ Actual Behavior Run failed: 'list' object has no attribute 'items' [code test.ymll.yml](https://github.com/user-attachments/files/23653907/code.test.ymll.yml)
yindo added the 🐞 bug label 2026-02-21 20:07:30 -05:00
yindo closed this issue 2026-02-21 20:07:30 -05:00
Author
Owner

@dosubot[bot] commented on GitHub (Nov 20, 2025):

This error happens because Dify's code node output validation expects the returned object to match the output schema exactly, including all nested arrays and objects. When you return a dictionary containing a multidimensional array (like a list of lists), Dify's validation logic sometimes tries to treat a list as a dictionary, leading to the 'list' object has no attribute 'items' error. This is a known limitation in Dify 1.9.2 and related versions [source].

To work around this, you have two main options:

  1. Align your output schema: Make sure the output schema for your code node matches the structure of your returned object, specifying arrays of arrays where needed. This can be tricky for deeply nested structures.

  2. Serialize the output: Use json.dumps() to serialize your complex object (with nested lists) to a string before returning it. For example:

    import json
    
    def main():
        obj = {
            "text": "testtest",
            "table": {
                "data": [
                    ["1", "2", "3", "4"],
                    ["one", "two", "tree", "four"]
                ]
            }
        }
        return {
            "result": json.dumps(obj)
        }
    

    Downstream nodes can then use json.loads() to deserialize the string back into a Python object for further processing [source].

If aligning the schema is too complex or you still get validation errors, serializing the output as a string is the most reliable workaround.

To reply, just mention @dosu.


How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other  Chat with Dosu Join Discord Share on X

@dosubot[bot] commented on GitHub (Nov 20, 2025): <!-- Answer --> This error happens because Dify's code node output validation expects the returned object to match the output schema exactly, including all nested arrays and objects. When you return a dictionary containing a multidimensional array (like a list of lists), Dify's validation logic sometimes tries to treat a list as a dictionary, leading to the `'list' object has no attribute 'items'` error. This is a known limitation in Dify 1.9.2 and related versions [[source]](https://github.com/langgenius/dify/issues/23798). To work around this, you have two main options: 1. **Align your output schema**: Make sure the output schema for your code node matches the structure of your returned object, specifying arrays of arrays where needed. This can be tricky for deeply nested structures. 2. **Serialize the output**: Use `json.dumps()` to serialize your complex object (with nested lists) to a string before returning it. For example: ```python import json def main(): obj = { "text": "testtest", "table": { "data": [ ["1", "2", "3", "4"], ["one", "two", "tree", "four"] ] } } return { "result": json.dumps(obj) } ``` Downstream nodes can then use `json.loads()` to deserialize the string back into a Python object for further processing [[source]](https://github.com/langgenius/dify/issues/23798). If aligning the schema is too complex or you still get validation errors, serializing the output as a string is the most reliable workaround. <!-- Dosu Comment Footer --> *To reply, just mention [@dosu](https://go.dosu.dev/dosubot).* --- <sup>How did I do? [Good](https://app.dosu.dev/response-feedback/a6617071-4e73-4477-8c46-7d9a9af4f4d6?feedback_type=great_response) | [Irrelevant](https://app.dosu.dev/response-feedback/a6617071-4e73-4477-8c46-7d9a9af4f4d6?feedback_type=irrelevant_answer) | [Incorrect](https://app.dosu.dev/response-feedback/a6617071-4e73-4477-8c46-7d9a9af4f4d6?feedback_type=incorrect_sources) | [Verbose](https://app.dosu.dev/response-feedback/a6617071-4e73-4477-8c46-7d9a9af4f4d6?feedback_type=too_verbose) | [Hallucination](https://app.dosu.dev/response-feedback/a6617071-4e73-4477-8c46-7d9a9af4f4d6?feedback_type=hallucination) | [Report 🐛](https://app.dosu.dev/response-feedback/a6617071-4e73-4477-8c46-7d9a9af4f4d6?feedback_type=bug_report) | [Other](https://app.dosu.dev/response-feedback/a6617071-4e73-4477-8c46-7d9a9af4f4d6?feedback_type=other)</sup>&nbsp;&nbsp;[![Chat with Dosu](https://dosu.dev/dosu-chat-badge.svg)](https://app.dosu.dev/6088a4f4-073a-43f3-b3d4-4f06fb0c05a0/ask?utm_source=github)&nbsp;[![Join Discord](https://img.shields.io/badge/join-5865F2?logo=discord&logoColor=white&label=)](https://go.dosu.dev/discord-bot)&nbsp;[![Share on X](https://img.shields.io/badge/X-share-black)](https://twitter.com/intent/tweet?text=%40dosu_ai%20helped%20me%20solve%20this%20issue!&url=https%3A//github.com/langgenius/dify/issues/28466)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#20449