#sinfonier BOLT - 将一个jarray对象添加到输出中

时间:2014-07-29 16:36:42

标签: java

如果我做

JSONArray array = new JSONArray();
[...]
this.addField("array", array);

它生成:

{..., "array":"[\"x\", \"y\"]" }

应该是:

{..., "array": ["x", "y"] }

sinfonier可能会在jarray对象上调用toString。我认为它应该创建一个完整的json,然后在完整的json上调用toString。

还有其他办法吗?

(这是一个非常具体的问题,对不起,但还没有可用的sinfonier标签)

2 个答案:

答案 0 :(得分:0)

所以,我参加了在Campus Party Recife上的sinfonier Hackathon,如果你需要创建一个数组,你需要先创建json对象并将它们添加到数组中,如下所示:

import org.json.JSONArray;
...
List aryLst = new ArrayList();
aryLst.add("x");
aryLst.add("y");
JSONArray list = new JSONArray(aryLst);

Sinfonier使用org.json包来操作json对象。

但是如果你的螺栓从一个truple获得json并且你在一个字段中保存一个json的值,你可以直接从truple获得这个值并保存。或者你可以使用json字段,就像其他螺栓或排水管中的字段一样。

答案 1 :(得分:0)

为了创建一个数组列表并将其添加到当前元组/映射的字段中,需要创建一个ArrayList>实例

Firts导入com.google.gson库:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

然后将源数组中的每个项添加到新的ArrayList实例:

JSONArray originalJsonArray = new JSONArray(json);
ArrayList<Map<String, Object>> newArrayList = new ArrayList<Map<String, Object>>();
if (originalJsonArray != null) {
    for (int i=0;i<originalJsonArray.length();i++){
        Map<String, Object> fieldValueItem = new Gson().fromJson(originalJsonArray.get(i).toString(), new TypeToken<HashMap<String, Object>>() {}.getType());
        newArrayList.add(fieldValueItem);
     }
}

最后添加新阵列:

this.addField("newarraylist",newArrayList);
this.addField("newarraylistlength",newArrayList.length());