0

我使用 asp.net web api 作为服务器,使用 android 作为客户端。我从 android 请求到 web api,我得到了 json 字符串。当我使用 Gson 将此 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}}"
4

2 回答 2

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 String 有额外的转义字符,您需要取消转义它们,您可以通过两种方式进行

一个也是简单的一个是格式化服务器中的服务以返回纯 json。

其次,您可以在您的 java 中处理该字符串,只需下载Apache commons lang库并将 commons-lang3-3.1.jar文件粘贴到您的libs文件夹

并像这样使用它

String formatedjsonstring=StringEscapeUtils.unescapeJava(yourjsonstring);
于 2013-03-06T05:48:42.587 回答
0

看起来您json在服务器上的生成器正在转义用作 ... 分隔符的双引号,以下是来自json.orgstring的字符串的定义。

在此处输入图像描述

中的字符串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 是否正确。

于 2013-03-06T06:08:46.693 回答