繁体   English   中英

toString()在Java哈希图中将“:”更改为“ =”

[英]toString() changes “:” to “=” in a java hashmap

我有以下

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值,因此将其更改为following会给我带来意外的结果

  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}"}

我可以通过将等号手动替换为“:”来实现

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);

    }
}

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

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

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

这是通常的行为。


在简单的情况下,替换并不坏,但是如果您的某些数据内容a =会破坏您的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);

OUTPUT:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM