Map

Map<String,Object> arg
StringBuffer s = new StringBuffer();
String sep = "";
for (String k : arg.keySet()) {
Object v = arg.get(k);
k = urlencode(k);
if(v.getClass().isAssignableFrom(Map.class)) {
String s2 = "";
String sep2 = "";
for(String k2 : ((Map<String,Object>)v).keySet() ){
Object v2 = ((Map<String,Object>)v).get(k2);
k2 = urlencode(k2);
s2 += sep2+k+"["+k2+"]="+String.valueOf( v2 ); 
sep2 = "&";
}
s.append(sep).append(s2);
} else {
s.append(sep).append(k).append("=").append(String.valueOf(v));
}
sep = "&";
}

解决方案 »

  1.   

    就是把Map中保存的数据以
    aa=11&bb=22这种形式输出
      

  2.   

    总体上来说是个转换url的方法,附带一些参数
    Map <String,Object> arg // 参数映射
    StringBuffer s = new StringBuffer(); 
    String sep = ""; 
    for (String k : arg.keySet()) { //对映射里的每一个key,
    Object v = arg.get(k); //取映射里的key对应的value
    k = urlencode(k); //转码
    if(v.getClass().isAssignableFrom(Map.class)) { //如果取出来的value还是一个映射map,则嵌套遍历取value,每个arg之间用&分割,最后得到形状如username=kkk&password=lll这样的url
    String s2 = ""; 
    String sep2 = ""; 
    for(String k2 : ((Map <String,Object>)v).keySet() ){ 
    Object v2 = ((Map <String,Object>)v).get(k2); 
    k2 = urlencode(k2); 
    s2 += sep2+k+"["+k2+"]="+String.valueOf( v2 ); 
    sep2 = "&"; 

    s.append(sep).append(s2); 
    } else { 
    s.append(sep).append(k).append("=").append(String.valueOf(v)); 

    sep = "&"; 
    }
      

  3.   

    感觉if(v.getClass().isAssignableFrom(Map.class)) 这句
    应该改成if (Map.class.isAssignableFrom(v.getClass()))
    前面的类是后面类的父类或接口都返回True这样比较合理。
    假设数据是:Map<String, Object> arg = new HashMap<String, Object>();
    Map<String, Object> arg1 = new HashMap<String, Object>();
    arg1.put("cc", "33");
    arg1.put("dd", "44");
    arg.put("aa", 11);
    arg.put("bb", 22);
    arg.put("arg1", arg1);输出为:arg1[dd]=44&arg1[cc]=33&aa=11&bb=22
      

  4.   


    Map <String,Object> arg;
    StringBuffer s = new StringBuffer();
    String sep = "";
    for (String k : arg.keySet()) {//循环arg里的数据
    Object v = arg.get(k);//得到具体某个value
    k = urlencode(k);
    if(v.getClass().isAssignableFrom(Map.class)) { //如果value值类型为Map
    String s2 = "";
    String sep2 = "";
    for(String k2 : ((Map <String,Object>)v).keySet() ){//再循环类型为Map的value
    Object v2 = ((Map <String,Object>)v).get(k2);
    k2 = urlencode(k2);
    s2 += sep2+k+"["+k2+"]="+String.valueOf( v2 );
    sep2 = "&"; 
    }
    s.append(sep).append(s2); //key1[key11}=value11&key1[key12]=value12
    } else {
    s.append(sep).append(k).append("=").append(String.valueOf(v));//key2=value2
    }
    sep = "&";
    }
    }
    最后生成刑如:key1[key11}=value11&key1[key12]=value12&key2=value2
    主要是用来分析url后面的参数的