我有一个map1,其中包含信息 [40256942,6] [60246792,5]
现在我想准备一个包含
等信息的map2itemNo, 40256942
qty, 6
itemNo, 60246792
qty, 5
准备最终信息为json
“partialArticlesInfo”: [{itemNo:”40256942”, availQty:”6”}, {itemNo:”60246792”, availQty:”5”}]
我正在尝试迭代map1以检索值并针对该键设置该值。但我只得到一个最后一个条目。有没有办法,我得到了新的地图,其中包含如上所述的条目
Map<String, String> partialArticlesInfo = new HashMap<String,String>();
Map<String, String> partialArticlesTempMap = null;
for (Map.Entry<String,String> entry : partialStockArticlesQtyMap.entrySet())
{
partialArticlesTempMap = new HashMap<String,String>();
partialArticlesTempMap.put("itemNo",entry.getKey());
partialArticlesTempMap.put("availQty",entry.getValue());
partialArticlesInfo.putAll(partialArticlesTempMap);
}
答案 0 :(得分:0)
在Java中(我假设您正在使用Java,将来指定它会很有帮助)和我所知道的其他语言,映射包含键和值之间的映射。每个密钥只允许一个映射。在“map2”中,键是“itemNo”和“availQty”。所以发生的事情是你的for循环设置第一个条目的值,然后用第二个条目中的数据覆盖它们,这就是为什么这是你看到的唯一一个。请查看Java - Map和Map - Java 8了解详情。
我不明白为什么你要把数据放到地图上,你可以直接把它放到JSON中,如下所示:
JSONArray partialArticlesInfo = new JSONArray();
for (Map.Entry<String,String> entry : partialStockArticlesQtyMap.entrySet()) {
JSONObject stockEntry = new JSONObject();
stockEntry.put("itemNo", entry.getKey());
stockEntry.put("availQty", entry.getValue());
partialArticlesInfo.put(stockEntry);
}
JSONObject root = new JSONObject();
root.put("partialArticlesInfo",partialArticlesInfo);
这将采用“map1”(代码中的partialStockArticlesQtyMap)并创建一个与您的示例完全相同的JSON对象 - 无需将map2作为中间步骤。它遍历map1中的每个条目,创建一个表示它的JSON对象并将其添加到JSON数组,最后将其作为“partialArticlesInfo”添加到根JSON对象。
具体代码可能略有不同,具体取决于您使用的JSON库 - 请查看详细信息的文档。
答案 1 :(得分:0)
我同意布兰登的观点。另一种解决方案是存储在Set或List对象中,如下所示。
class Item {
Long itemNo;
int quantity;
public int hashCode() {
Long.hashCode(itemNo) + Integer.hashCode(quantity);
}
public int equals(Object other) {
other instanceOf Item && other.itemNo == this.itemNo && other.quantity = this.quantity;
}
}
}
然后你可以使用他描述的JsonArray方法来获取输出中的Json字符串
这意味着向对象添加新变量不需要更多努力来生成Json