0

サーバーとしてasp.net Web APIを使用し、クライアントとしてAndroidを使用しています。Android から Web API にリクエストしていますが、json 文字列を取得しています。この json 文字列を Gson を使用して 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文字列には余分なエスケープ文字があります.2つの方法でエスケープを解除する必要があります.

最初の簡単な方法は、純粋な json を返すようにサーバーのサービスをフォーマットすることです。

次に、その文字列を Java で処理できます。Apache commons langcommons-lang3-3.1.jarライブラリをダウンロードして、ファイルをlibsフォルダーに貼り付ける だけです。

そして、このように使用します

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

jsonサーバー上のジェネレーターが、... の区切り文字として使用される二重引用符をエスケープしているようstringです。以下は、json.orgからの文字列の定義です。

ここに画像の説明を入力

の文字列は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 に答える