扣子开源版代码节点怎么用?把 JSON 字符串转成对象数组

在 Coze Studio 的 Python 代码节点解析 JSON 字符串,校验问答对象数组并输出 records/count;附完整代码、输出声明和异常输入验证。

在扣子开源版 Coze Studio 工作流里,JSON 字符串与对象数组是两种数据。下游需要 Array<Object>,上游却返回一段带方括号的 String 时,可以用 Python 代码节点做一次解析和结构校验,再引用真正的数组输出。

本文适用于已有 Coze Studio 工作流与可用代码执行组件的用户。示例以 2026 年 10 月 1 日读取的开源提交 fefb05ff27be 为依据,该版本代码节点后端只接受 Python 执行;不要照搬商业版 JavaScript 示例。以下转换代码做过本地逻辑检查,未在读者的 Studio 执行环境中实测。

扣子开源版代码节点怎么用?把 JSON 字符串转成对象数组

明确输入与输出

本例输入名为 payload,类型为 String,内容是下面这段虚构问答 JSON。代码节点输出 records 为对象数组,count 为 Integer。

[
  {"question":"链接多久有效?","answer":"生成后 24 小时。"},
  {"question":"最多下载几次?","answer":"同一链接最多 3 次。"}
]

目标不是“把一切都转成数组”,而是只接受本例定义的问答结构。顶层是对象、数组里混入字符串或答案为空,都应报出明确错误。下游工具有其他字段要求时,要另外调整校验和输出定义。

配置代码节点与输出结构

  1. 在工作流里连接开始 → 代码 → 结束。开始增加 String 参数 payload;代码节点同名输入 payload 引用开始.payload。
  2. 代码节点语言选择 Python。保留平台的 Args、Output 类型提示,替换 main 函数主体为下面的实现。
  3. 输出声明 records 为 Array<Object>,每个对象包含 question、answer 两个 String 字段;count 为 Integer。名称必须与 return 中的键一致。
  4. 结束节点引用代码.records 和代码.count,保持对应类型;如后续接插件,直接引用 records,不要再转为字符串。

入口函数、args.params 和输出结构的对应关系可参考官方代码节点文档。商业版支持的包或语言不自动等于开源环境已安装;本例只用标准库 json。

import json

async def main(args: Args) -> Output:
    raw = args.params.get("payload")
    if not isinstance(raw, str) or not raw.strip():
        raise ValueError("payload 必须是非空 JSON 字符串")

    try:
        records = json.loads(raw)
    except json.JSONDecodeError as exc:
        raise ValueError("payload 不是合法 JSON") from exc

    if not isinstance(records, list):
        raise ValueError("JSON 顶层必须是数组")

    clean = []
    for index, item in enumerate(records):
        if not isinstance(item, dict):
            raise ValueError(f"records[{index}] 必须是对象")
        question = item.get("question")
        answer = item.get("answer")
        if not isinstance(question, str) or not question.strip():
            raise ValueError(f"records[{index}].question 必须是非空字符串")
        if not isinstance(answer, str) or not answer.strip():
            raise ValueError(f"records[{index}].answer 必须是非空字符串")
        clean.append({"question": question.strip(), "answer": answer.strip()})

    return {"records": clean, "count": len(clean)}

这里有意只输出 question、answer,其他字段不会保留。空数组 [] 被接受并得到 count=0;是否允许零条记录,应由后续业务节点决定。代码不调用模型,也不产生凭空补充的答案。

试运行时同时看原始输出和最终输出

在开始.payload 填入上面的 JSON,运行后应得到 count=2,records 是两个对象,第一条 question 为“链接多久有效?”。打开代码节点原始输出与最终输出,再核对结束节点返回的类型及内容。

原始输出用于确认 Python return 了什么,最终输出用于确认平台按声明提供给下游的是什么。原始输出有 records,最终却缺少它时,检查输出名称与结构;最终数组正常,下游仍报“应该为 array”时,检查下游是否误引用整个对象、count 或开始.payload。

输入 预期行为 验证目的
上面的两条问答数组 records 两条、count=2 正常解析与字段保留
{“question”:”测试”} 报“JSON 顶层必须是数组” 不把对象偷偷包成数组
[“测试”] 报 records[0] 必须是对象 不把字符串数组当对象数组
[{“question”:”测试”,”answer”:””}] 报 answer 必须非空 拒绝缺失的业务字段
不是 JSON 报 payload 不是合法 JSON 输入错误可定位
[] records=[]、count=0 空数组与执行失败区分

常见问题

为什么界面有代码节点,却执行不了?

编辑器能保存代码,不证明部署的 Python 执行组件可用。若错误是无法连接执行服务、执行超时或模块不可用,先看 Studio 服务与执行组件的日志;本例 json 不需要额外安装第三方包。环境没有跑通时,不要用空数组伪装成功结果。

已经是对象数组,还需要 json.loads 吗?

不需要。本例只用于 String 输入;若上游真实类型已是 Array<Object>,直接引用并做所需校验即可。对数组调用 json.loads 会失败,先检查类型再选择转换方式。

想写进飞书多维表格,能直接复用 records 吗?

不能仅凭变量同名判断。不同工具对 records 元素的字段要求不同,可能需要 fields 等嵌套结构。先读取所用工具的参数定义,再按它的契约映射数据;本文只完成 JSON 到问答对象数组的转换,没有写入任何表格。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31539.html

赞 (0)
AI小管家的头像AI小管家
Coze Studio 工作流试运行失败?从参数引用、类型到空输出排查
上一篇 2天前
Coze Studio API 多轮对话教程:用 Python 保持同一个 conversation_id
下一篇 2天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部