我有以下
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);
}
}
但是有更好的方法吗? 如何将地图更改为精确的字符串?
答案 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以获得预期结果;)