toString()更改":"到" ="在java hashmap中

时间:2016-08-08 13:24:48

标签: java string hashmap tostring

我有以下

public static void main(String []args) throws JSONException{
        Map<String,String> varMap = new HashMap<String,String>();
        varMap.put("VAR","123");
        varMap.put("OTHER_VAR","234");




        JSONObject json = new JSONObject();
        json.put("Variable",varMap); 
        System.out.println("JSON " + json);

    }

这给了我正确的结果如下

   JSON {"Variable":{"VAR":"123","OTHER_VAR":"234"}}

但是在我的json中我只能使用String值,所以将其更改为以下会给我一个意想不到的结果

  public static void main(String []args) throws JSONException{
            Map<String,String> varMap = new HashMap<String,String>();
            varMap.put("VAR","123");
            varMap.put("OTHER_VAR","234");




            JSONObject json = new JSONObject();
            json.put("Variable",varMap.toString()); 
            System.out.println("JSON " + json);

        }

意外结果

JSON {"Variable":"{VAR=123, OTHER_VAR=234}"}

我可以通过手动将等号替换为&#34;:&#34;

来实现此目的
public class json{

    public static void main(String []args) throws JSONException{
        Map<String,String> varMap = new HashMap<String,String>();
        varMap.put("VAR","123");
        varMap.put("OTHER_VAR","234");




        JSONObject json = new JSONObject();
        String jsonVarMap = varMap.toString().replace("=", ":");
        json.put("Variable", jsonVarMap); 
        System.out.println("JSON " + json);

    }
}

但是有更好的方法吗? 如何将地图更改为精确的字符串?

1 个答案:

答案 0 :(得分:3)

这是因为您使用HashMap::toString()

json.put("Variable",varMap.toString()); 

这是通常的行为。

在简单的情况下,替换也不错,但如果您的某些数据内容为=,则会破坏您的json。

如果您想以更礼貌的方式获得正确的结果,extend HashMap并覆盖toString

<强> JSonMap.java

public class JSonMap<K,V> extends HashMap<K,V> {
    private static final long serialVersionUID = 1L;
    private static String SEPARATOR = "";
    private static final char QUOTE = '"';
    private static final char DOTS = ':';    

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<K, V> entry : this.entrySet()) {
            sb.append(SEPARATOR);

            // same as sb.append("" + QUOTE + entry.getKey() + QUOTE + ":"  + QUOTE + entry.getValue() + QUOTE);
            sb.append(QUOTE);
            sb.append(entry.getKey());
            sb.append(QUOTE);
            sb.append(DOTS);
            sb.append(QUOTE);
            sb.append(entry.getValue());
            sb.append(QUOTE);
            SEPARATOR = ", ";
        }
        return sb.toString();
    }

}

执行:

Map<String,String> varMap = new JSonMap<String,String>();
varMap.put("VAR","123");
varMap.put("OTHER_VAR","234");

System.out.println(varMap);

<强>输出:

"VAR":"123", "OTHER_VAR":"234"

现在,应用于您的JSON以获得预期结果;)