0

我在哈希图中有一个哈希图,例如

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 的内部列表没有迭代

4

3 回答 3

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()会做您需要的事情,这是您目前所做的假设。

于 2013-01-04T11:51:25.697 回答
1

尝试这样做:

Set<Map.Entry<String, String>> entrySet = JSONObject.entrySet();
for (Entry entry : entrySet) {
    // your code
}
于 2013-01-04T11:48:34.190 回答
1
for (Map.Entry<String, String> entry : JSONObject.entrySet()) {
    // ...
}
于 2013-01-04T11:51:09.593 回答