org.json.JSONArray 到 Mulesoft 中的负载

org.json.JSONArray to payload in Mulesoft

我正在使用 java class 来转换我的 mule 应用程序中的数据结构。在流程结束时,我想访问结果 return 作为 application/json.
调试时,我得到了有效载荷的这些值:

Transform 组件识别 org.json.JSONArray 类型的负载。在它下面有一个 var myArrayList,我没有分配它包含所有值。
java 中的 getNodes() 方法如下所示:

public JSONArray getNodes() {
    JSONArray arr = new JSONArray();
    for(Node node : nodes) {
        arr.put(node.getJSON());
    }
    return arr;
}

其中 return 值是正确的。
我尝试将 Invoke 组件的 MIME 类型设置为 application/jsontext/plain,两者都导致错误。
我尝试将负载 return 设置为 output application/json---payload,结果生成了一个空对象数组,其大小与我的 return 值相同。
查看手表时,我通过访问 payload.myArrayList 获取列表,但似乎无法获取转换组件中的值。
流程如下所示。

我如何在 mulesoft 中从 JSONArray return json?

编辑:解决方案:

public Node[] getNodes() {
    assignParentIds();
    assignNextIds();
    assignChildIds();
        
    Node[] nodeArr = new Node[nodes.size()];
    for(int i = 0; i < nodes.size(); i++) {
        nodeArr[i] = nodes.get(i);
    }
    return nodeArr;
}



%dw 2.0
output application/json
---
{
    hierarchieSet: payload map ( item , index ) -> {
        zshop: item.zshop,
        nodeid: item.nodeid,
        nodename: item.nodename,
        tlevel: item.tlevel,
        parentid: item.parentid,
        childid: item.childid,
        nextid: item.nextid
    }
}

我怀疑 DataWeave 将 org.json.JSONArray 理解为可迭代对象,因为它实现了 Iterable<Object>,但它并不特别理解 JSON 节点。对于 DataWeave,application/json 是一个包含 JSON 的 'textual' 表示的字符串或流。使用 Java 对象作为其实现来表示 JSON 的第三方库不会被理解为 JSON 并且这不是 application/json MIME 类型的正确用法.

您应该将生成的 JSON 数组序列化回文本文档以用作转换处理器的输入。

或者,您可以将 JSON 结构转换为普通 Java 对象 (POJO),用作 application/java。这应该更有效,因为避免转换为 JSON 并再次解析它。