在Java開發中,常常需要將數據轉換為JSON格式,用于接口傳遞或數據存儲等場景。但是,可能會遇到JSON亂碼的問題,導致無法正確解析JSON數據。
亂碼問題的根源在于編碼方式的不統一。在Java中,默認使用UTF-8編碼,而JSON格式中默認使用Unicode編碼。當兩種編碼方式不一致時,就會出現亂碼的情況。
為了解決這個問題,我們需要對Java中的字符串進行編碼轉換。下面是一個使用Gson庫解析JSON數據并轉換編碼的示例:
import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class JsonUtils { public static String decodeUnicode(String unicode) { StringBuffer sb = new StringBuffer(); String[] hex = unicode.split("\\\\u"); for (int i = 1; i< hex.length; i++) { int value = Integer.parseInt(hex[i], 16); sb.append((char)value); } return sb.toString(); } public static String toJson(Object obj) { Gson gson = new GsonBuilder() .create(); return gson.toJson(obj); } public staticT fromJson(String json, Class clazz) { Gson gson = new GsonBuilder() .create(); return gson.fromJson(decodeUnicode(json), clazz); } }
在以上代碼中,我們首先實現了一個將Unicode編碼的字符串轉換為UTF-8編碼的字符串的方法decodeUnicode()。這是由于在JSON格式中,中文常常會被轉換為Unicode編碼的格式,例如 "\\u4f60\\u597d" 表示 "你好"。
然后,我們使用Gson庫提供的toJson()和fromJson()方法,將對象序列化為JSON格式或者將JSON格式反序列化為對象。在反序列化的過程中,我們先調用decodeUnicode()方法轉換編碼,再進行反序列化。
使用以上代碼,我們就可以避免JSON亂碼的問題了。