如何在从MAP中检索数据时避免JSON数组下的双方括号

时间:2017-01-03 11:13:18

标签: java

我将LinkedHaspMap中的数据以String的形式存储在其中,而将JSONArray作为其值存储 但是当从Map中检索数据时,我得到值的双方括号

这是我的代码

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
public class Test {
    public static void main(String args[]) {
        Map<String, JsonArray> datafromdb = new LinkedHashMap<String, JsonArray>();
        for(int i=0;i<2;i++) {
            JsonArray jsonarray = new JsonArray();
            JsonObject pacs_obj = new JsonObject();
            pacs_obj.addProperty("pac_id", "1235");
            jsonarray.add(pacs_obj);
            String new_catid = "1";

            if (!datafromdb.containsKey(new_catid)) {
                datafromdb.put(new_catid, new JsonArray());
            }
            datafromdb.get(new_catid).add(jsonarray);
        }
        Iterator it = datafromdb.entrySet().iterator();
        JsonArray catarr = new JsonArray();
        while (it.hasNext()) {
            Map.Entry pair = (Map.Entry) it.next();
            JsonArray array = (JsonArray) pair.getValue();
            System.out.println(array);
        }
    }
}

输出

[[{"pac_id":"1235"}],[{"pac_id":"1235"}]]

输出必须在哪里

[{"pac_id":"1235"},{"pac_id":"1235"}]

您能否告诉我如何解决此问题

3 个答案:

答案 0 :(得分:3)

如果第一次没有密钥,那么你正在添加一个空的{{1}},之后你将获取该空数组并在其中添加你创建的数组。

如果密钥在那里,则获取已创建的数组并在其中添加新数组。

{{1}}

答案 1 :(得分:1)

问题是您的datafromdb地图为Map<String, JsonArray>。 Map是您希望保留的外部数组,JsonArray是不必要的内部数组。要摆脱内部数组,请使用JsonObject而不是JsonArray

 Map<String, JsonObject> datafromdb = new LinkedHashMap<>();
 for(int i=0;i<2;i++) {
     JsonObject pacs_obj = new JsonObject();
     pacs_obj.addProperty("pac_id", "1235");
     String new_catid = "1";

     if (!datafromdb.containsKey(new_catid)) {
         datafromdb.put(new_catid, new JsonObject());
     }
     datafromdb.get(new_catid).add(pacs_obj);
 }
 Iterator it = datafromdb.entrySet().iterator();
 while (it.hasNext()) {
     Map.Entry pair = (Map.Entry) it.next();
     JsonObject object = (JsonObject) pair.getValue();
     System.out.println(object);
 }

答案 2 :(得分:0)

我假设你的例子不是真正的代码,只是一个小例子来创建一个填充的Map来重现输出:

从数组映射中,您可以创建一个只连接所有数组的数组:

Iterator it = datafromdb.entrySet().iterator();
JsonArray catarr = new JsonArray();
while (it.hasNext()) {
    Map.Entry pair = (Map.Entry) it.next();
    JsonArray array = (JsonArray) pair.getValue();
    for (int i=0;i<array.size();i++) {
        JsonArray inner=(JsonArray)array.get(i);
        catarr.addAll(inner);
    }
}
System.out.println(catarr);