我在hashmap中有一个hashmap,如
List<Map> mapList = new ArrayList<Map>();
for (int i = 0; i < 2; i++) {
Map iMap = new HashMap();
iMap.put("Comment", "");
iMap.put("Start", "0");
iMap.put("Max", "0");
iMap.put("Min", "0");
iMap.put("Price", "5000.00");
iMap.put("DetailsID", "51");
mapList.add(iMap);
}
Map mMap = new HashMap();
mMap.put("ID", "27");
mMap.put("ParticipantID", "2");
mMap.put("ItemDetails", mapList);
我想迭代这个地图并为我做的JSONObject
try {
JSONObject object = new JSONObject();
Iterator iterator = mMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry mEntry = (Map.Entry) iterator.next();
String key = mEntry.getKey().toString();
String value = mEntry.getValue().toString();
object.put(key, value);
}
Log.v(TAG, "Object : " + object);
响应就像
Object : {"ItemDetails":"[{Price=5000.00, Comment=, DetailsID=51, Min=0, Max=0, StartViolation=0}, {Price=5000.00, Comment=, DetailsID=51, Min=0, Max=0, StartViolation=0}]","ID":"27","ParticipantID":"2"}
hashmap的内部列表不是迭代
答案 0 :(得分:4)
hashmap的内部列表不是迭代
事实上。您还没有编写任何代码来迭代它。当您获得ItemDetails
条目时,您将拥有"ItemDetails"
的密钥和一个列表值。以下是您正在做的事情:
String key = mEntry.getKey().toString();
String value = mEntry.getValue().toString();
所以你只是在列表中调用toString()
。你需要弄清楚你真正想做的事情。例如,您可能需要:
if (mEntry.getValue() instanceof List) {
// Handle lists here, possibly recursively
}
请注意,您也可能想要递归到每个Map
。同样,您需要编写代码来执行此操作。基本上,你不能假设toString()
会做你需要的,这是你现在正在做的假设。
答案 1 :(得分:2)
尝试这样做:
Set<Map.Entry<String, String>> entrySet = JSONObject.entrySet();
for (Entry entry : entrySet) {
// your code
}
答案 2 :(得分:1)
for (Map.Entry<String, String> entry : JSONObject.entrySet()) {
// ...
}