【发布时间】:2021-10-08 07:40:26
【问题描述】:
我正在尝试将值累积到 JSONArray 中。 对于大多数数据,它可以按我的预期工作,例如使用我编写的函数(的简化版本)......
private void copyValidJsonArray(JSONObject objIn, String arrNameIn, JSONObject objOut, String arrNameOut) throws JSONException {
// This function copies each item of a JSONArray named arrNameIn within objIn to another JSONArray named arrNameOut in objOut, creating arrNameOut if it doesn't exist there.
if (objIn != null) {
if (objOut == null)
objOut = new JSONObject();
JSONArray arrIn = objIn.optJSONArray(arrNameIn);
if (arrIn != null && arrIn.length() > 0) {
for (int i = 0; i < arrIn.length(); i++) {
String valueIn = arrIn.get(i).toString();
objOut.accumulate(arrNameOut, valueIn);
}
}
if (!objOut.has(arrNameOut))
objOut.put(arrNameOut, emptyJSONArray);
}
}
...但是当只有一个 valueIn 被累加时,accumulate 会构建一个不在数组中的简单字符串。
我得到了什么:
“颜色”:[“红色”,“绿色”,“蓝色”]
“形状”:[“椭圆”,“三角形”]
“心情”:“开心”
我想要什么:
“颜色”:[“红色”,“绿色”,“蓝色”]
“形状”:[“椭圆”,“三角形”]
“心情”:[“快乐”]
研究这个问题,我发现我得到的是正确且普遍期望的行为。 但是会读取我的输出的系统非常简单,并且每次都期望相同的结构。
搜索网络和堆栈溢出,我发现的一切都假定我想要默认行为,但我不能是唯一一个必须处理一心一意的下游系统的人,对吧? ;)
底线:无论传入多少值,我如何才能顺利确保输出 JSONArray?
编辑:我这样调用函数...
copyValidJsonArray(inputData, "colours", outputData, "Colors");
copyValidJsonArray(inputData, "geo", outputData, "Shapes");
copyValidJsonArray(inputData, "moods", outputData, "Moods");
...每条记录运行一次,就像在 Pentaho (PDI) 中一样。
【问题讨论】:
-
对于 JSONArray in JSONObject just use append
标签: java arrays json pdi accumulate