2013-03-06 40 views
0

我使用asp.net web api作为服务器和android作为客户端。我是从Android的请求的Web API和我得到的JSON string.When我使用GSON我越来越exception.My代码是这样的JSON字符串赋值给Java对象,Android Json反序列化到java类

private StringBuilder inputStreamToString(InputStream is) { 
     String line = ""; 
     StringBuilder total = new StringBuilder(); 
     // Wrap a BufferedReader around the InputStream 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
     // Read response until the end 
     try { 
      while ((line = rd.readLine()) != null) { 
       total.append(line); 
      } 
      Log.i("RETURN DATA:", total.toString()); 


       Gson gson = new Gson(); 
       ReturnData returndata = (ReturnData) 
       gson.fromJson(total.toString(), ReturnData.class); 
       Log.i("RESULT DATA", returndata.ResultData.toString()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     // Return full string 
     return total; 
    } 

我的JSON字符串(我是从服务器)获取一样,

"\"OperationResult\":0,\"Messages\":operationsuccess\"\",\"UpdateAvailable\":\"\",\"ResultData\":{\"SessionId\":1584789522,\"UserName\":vinoth,\"AccoundId\":1236985,\"Roles\":[],\"DisplayName\":Vinoth,\"Status\":0,\"Type\":0}}" 
+0

它看起来像你缺少你的回应打开括号和...你为什么在回复中有转义字符? – 2013-03-06 05:48:11

+0

@PrafulBhatnagar我认为这是复制粘贴问题... – Pragnani 2013-03-06 05:49:25

+0

,你为什么在响应中有转义字符..? – 2013-03-06 05:49:55

回答

2

编辑: 试试这个删除报价

结果是你的jsonstring

  if(results!=null && results.length()!=0) 
      { 
       if(results.startsWith("\"")) 
       { 
        results=results.substring(1,results.length()); 
       } 
       if(results.endsWith("\"")) 
       { 
        results=results.substring(0,results.length()-1); 
       } 
       } 

你的JSON字符串有额外的转义字符,则需要取消转义他们,你可以做两种方式

首先和简单的一个是格式服务在你的服务器返回纯JSON。

可以处理该字符串在Java,只要下载Apache commons lang库 和commons-lang3-3.1.jar文件粘贴到您的文件夹

而且使用这样的

String formatedjsonstring=StringEscapeUtils.unescapeJava(yourjsonstring); 
+0

允许以这种方式转义JSON字符串,所以解串器应该处理它。 – fredrik 2013-03-06 05:54:11

+0

我用这个StringEscapeUtils.unescapeJava()。这对我来说非常有用。但还有一个问题是无法从jsonstring中删除前后双引号。 – 2013-03-06 07:58:58

+0

@VinothKumar更新了答案,检查它,你可以通过检查答案旁边的正确标记来标记这个答案。 – Pragnani 2013-03-06 08:38:32

0

它看起来就像服务器上的json生成器正在转义用作string的分隔符的双引号...以下是从json.org字符串..

enter image description here

Json该字符串应该是双引号括起来..逃脱包机使用,当你想要把双引号与该字符串中...

以下是有效的JSON,如果你想保持引号作为JSON

{ 
    "\"OperationResult\"": 0, 
    "\"Messages\"": "operationsuccess\"\"", 
    "\"UpdateAvailable\"": "", 
    "\"ResultData\"": { 
     "\"SessionId\"": 1584789522, 
     "\"UserName\"": "vinoth", 
     "\"AccoundId\"": 1236985, 
     "\"Roles\"": [], 
     "\"DisplayName\"": "Vinoth", 
     "\"Status\"": 0, 
     "\"Type\"": 0 
    } 
} 

关键的组成部分,下面是有效的JSON,如果你不希望保留的报价为关键的部分..

{ 
    "OperationResult": 0, 
    "Messages": "operationsuccess", 
    "UpdateAvailable": "", 
    "ResultData": { 
     "SessionId": 1584789522, 
     "UserName": "vinoth", 
     "AccoundId": 1236985, 
     "Roles": [], 
     "DisplayName": "Vinoth", 
     "Status": 0, 
     "Type": 0 
    } 
} 

有这种所谓的JSONLint.com非常漂亮,简单的网站,我一直用它来检查,如果JSON是正确的或不..