2015-05-31 7 views
0

Мой ниже андроид код бросает(Android) JSONObject не может быть преобразован в JSONArray

org.json.JSONException: Значение { "ID": 1, "отображаемое_имя": "Маниш", "имя_пользователя" : "[email protected]"} в AuthenticateUserResult типа org.json.JSONObject не могут быть преобразованы в JSONArray

Код:

String response = Common.ExecuteHttpRequest(Url); 
JSONObject jsonObject = new JSONObject(response); 
JSONArray jArray = jsonObject.getJSONArray("AuthenticateUserResult"); 

Ответ - строка из метода WCF.

{ "AuthenticateUserResult": { "отображаемое_имя": "Маниш", "ID": 1, "имя_пользователя": "[email protected]"}}

ответ

0

Исключением является правильным, поскольку значение "AuthenticateUserResult" объявляется как элемент ({}), а не в виде массива ({}).

Чтобы исправить это, используйте метод getJSONObject, чтобы получить значение "AuthenticateUserResult", как это:

String response = Common.ExecuteHttpRequest(Url); 
JSONObject jsonObject = new JSONObject(response); 
JSONObject result = jsonObject.getJSONObject("AuthenticateUserResult"); 

После этого, вы можете получить дочерний элемент, например:

String mUserName = result.getString("UserName"); 
2

Значение AuthenticateUserResult является JSON Объект (он заключен в {}).

Изменить эту строку в этом

JSONObject jArray = jsonObject.getJSONObject("AuthenticateUserResult"); 

Тогда вы можете получить следующие данные:

String displayName = jArray.getString("DisplayName"); 
// Etc... 
2

Есть три обходные пути, чтобы решить эту проблему.

1.Use JsonObject. Ваш сервер WCF просто передает его в JsonObject.

String response = Common.ExecuteHttpRequest(Url); 
JSONObject jsonObject = new JSONObject(response).getJSONObject("AuthenticateUserResult"); 

2.Use массив JSON в качестве контейнера

String response = Common.ExecuteHttpRequest(Url); 
JSONObject jsonObject = new JSONObject(response); 
JSONArray jArray = new JSONArray().put(jsonObject.getJSONObject("AuthenticateUserResult")); 

3.Edit сервера, чтобы обеспечить AuthenticationUserResult в массив JSON. Правильный формат будет таким, как показано ниже.

{"AuthenticateUserResult":[{"DisplayName":"Manish","ID":1,"UserName":"[email protected]"}]} 
+0

второй вариант не работает .. :) – Manish

+0

@Manish // редактируемый. – Youngjae