Android - 奇怪的EscapeUtil.unescapeString崩溃

Wri*_*sCS 5 java android json unescapestring

从我们的应用程序服务器接收JSON字符串时遇到崩溃.我们认为,当条目具有"引号"时,会添加额外的转义.

双逃?

在android中,我如何确定是否收到这样的字符串,以及如何从Android端修复它?

这是我们当前的响应字符串处理:

public String processResponseString(String responseString) {
    if (responseString.startsWith("\"")) {
        responseString = responseString.substring(1, responseString.length());
    }
    if (responseString.endsWith("\"")) {
        responseString = responseString.substring(0, responseString.length() - 1);
    }
    responseString = EscapeUtil.unescapeString(responseString);
    return responseString;
}
Run Code Online (Sandbox Code Playgroud)

此外,崩溃后logcat不包含整个json字符串,因此我无法看到导致崩溃的实际字符串.


例外

 java.lang.ClassCastException: com.optiisolutions.housekeeping.model.OptiiAPI.OptiiError cannot be cast to java.util.Map
 at com.optiisolutions.housekeeping.network.OptiiHTTPClientRetroFit$2.success(OptiiHTTPClientRetroFit.java:186)
 at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45)
Run Code Online (Sandbox Code Playgroud)

OptiiHTTPClientRetroFit.java:186

optiiClient.postRequest(event.getRequest(), new Callback<Map<String, Object>>() {
    @Override
     public void success(Map<String, Object> stringObjectMap, Response response) {
         Log.d(TAG, "Successful response: " + stringObjectMap.toString());
          String result = (String) stringObjectMap.get(OPTII_RESULT_TYPE);
          String json = gson.toJson(stringObjectMap, Map.class);
Run Code Online (Sandbox Code Playgroud)

Mer*_*hin 0

我试图复制你的字符串。我假设您想保留引号。我可以用这个简单的算法解决它,希望它对你有用:

    public static String process(String s){
       String sep = "\\\\";
       String[] arr = s.split(sep);
       StringBuilder sb = new StringBuilder();

       for(String str : arr){
          sb.append(str);
       }

       return sb.toString();
    }  
Run Code Online (Sandbox Code Playgroud)