gpt4 book ai didi

java - toString() 在 java hashmap 中将 ":"更改为 "="

转载 作者:行者123 更新时间:2023-11-30 08:00:02 45 4
gpt4 key购买 nike

我有以下内容

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

我可以通过手动将等于替换为“:”来实现这一点

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

这是通常的行为。


替换在简单的情况下还不错,但是如果你的一些数据内容是 = 它会破坏你的 json。

如果您想以更礼貌的方式获得正确的结果,扩展 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 以获得预期结果 ;)

关于java - toString() 在 java hashmap 中将 ":"更改为 "=",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38830438/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com