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/json
或 text/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 并再次解析它。
我正在使用 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/json
或 text/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 并再次解析它。