Skip to content

The 'create_json_message(self, json: Mapping | list)' method can only input 'dict'. If 'list' is input, it will be automatically ignored as null #271

@xuming9

Description

@xuming9

issue

I am creating a plugin tool for converting strings in array format to arrays. After repeated testing and verification, it was found that the method 'creat_json message' can only input 'dict', and if 'list' is input, it will automatically ignore it as null
For example: when entering ['a ','b'] , the plugin should output {"text": "", "files": [], "json": ["a", "b"]} , but in reality it outputs FAIL

background

Name: dify_plugin
Version: 0.6.2
Summary: Dify Plugin SDK
Home-page: https://github.com/langgenius/dify-plugin-sdks.git
Author:
Author-email: langgenius <hello@dify.ai>
License: Apache2.0
Location: C:\Program Files\miniconda3\envs\dify\Lib\site-packages
Requires: dpkt, Flask, gevent, httpx, packaging, pydantic, pydantic_settings, pyyaml, requests, socksio, tiktoken, Werkzeug, yarl
Required-by:

code

py

from collections.abc import Generator
from typing import Any
import json

from dify_plugin import Tool
from dify_plugin.entities.tool import ToolInvokeMessage

import logging
from dify_plugin.config.logger_format import plugin_logger_handler

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.addHandler(plugin_logger_handler)

class StringToArrayTool(Tool):
    def _invoke(self, tool_parameters: dict[str, Any]) -> Generator[ToolInvokeMessage]:
        try:
            # Get the input array string
            array_str = tool_parameters.get('string_input', '')
            if not array_str:
                yield self.create_json_message(None)
                return
            
            # Process input string, support both single and double quotes format
            array_str = array_str.strip()
            # logger.info(f"array_str: {array_str}")
            # Convert single quotes to double quotes, support ['a','b','c'] format
            if array_str.startswith("['") and array_str.endswith("']"):
                array_str = array_str.replace("'", '"')
            
            # Try to parse JSON
            parsed_array = json.loads(array_str)
            # Ensure the result is an array
            if isinstance(parsed_array, list):
                yield self.create_json_message(parsed_array)
            else:
                raise ValueError("Input string is not a valid array format")
        except json.JSONDecodeError:
            raise ValueError("Input string is not a valid array format")
        except Exception as e:
            raise ValueError(f"Unknown error occurred: {e}")

** yaml **

outputs:
  type: object
  properties:
    result:
      type: array
      items:
        type: string
      description:
        en_US: "Parsed array result"

log:

[on_tool_execution]
Tool: string-to-array
Outputs: {"type":"json","message":{},"meta":null}

2025-12-25 02:35:32.611 ERROR [Dummy-831] [node.py:329]  - Node 1766625751605 failed to run
Traceback (most recent call last):
  File "/app/api/core/workflow/nodes/base/node.py", line 319, in run
    for event in result:
                 ^^^^^^
  File "/app/api/core/workflow/nodes/tool/tool_node.py", line 132, in _run
    _ = yield from self._transform_message(
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/api/core/workflow/nodes/tool/tool_node.py", line 316, in _transform_message
    assert isinstance(message.message, ToolInvokeMessage.JsonMessage)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions