[英]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.