我将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"}]
您能否告诉我如何解决此问题
答案 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);