2016-11-10 2 views
3

Я столкнулся с исключением исключения json. Хотя я конвертирую json в java-объект.Исключение конверсии JSON для java-объекта

Вот мой JSON

[ 
    { 
     "PrefrenceId":"228f176d-d224-32d7-9bb5-6287a06a68e8", 
     "UserId":"327e6c64-bc90-3ae8-8f7d-72837581ca13", 
     "QuestionnaireId":"41f31b11-47f5-3e29-8c88-1a3615c978a7", 
     "Suggestions":"", 
     "Explanation":"", 
     "IsActive":true, 
     "IsDelete":false, 
     "DateCreated":"2016-11-01 09:53:00.000", 
     "DateUpdated":"2016-11-01 09:53:17.000" 
    }, 
    { 
     "PrefrenceId":"52a74739-bdd3-33ac-a83f-72f60b1992b5", 
     "UserId":"327e6c64-bc90-3ae8-8f7d-72837581ca13", 
     "QuestionnaireId":"8cd5ac8e-89db-3d7b-bb2d-4e6735b245de", 
     "Suggestions":"", 
     "Explanation":"", 
     "IsActive":true, 
     "IsDelete":false, 
     "DateCreated":"2016-11-01 09:48:53.000", 
     "DateUpdated":"2016-11-01 09:53:15.000" 
    }, 
    { 
     "PrefrenceId":"ae7fc877-b26a-34d3-a5f3-244c7e777e08", 
     "UserId":"327e6c64-bc90-3ae8-8f7d-72837581ca13", 
     "QuestionnaireId":"d3b98cde-111c-30d5-a4c9-412a76b656eb", 
     "Suggestions":"Camping", 
     "Explanation":"", 
     "IsActive":true, 
     "IsDelete":false, 
     "DateCreated":"2016-11-01 09:53:02.000", 
     "DateUpdated":"2016-11-01 09:53:19.000" 
    }, 
    { 
     "PrefrenceId":"bcac0da7-31a6-345f-be82-ddff17c29b35", 
     "UserId":"327e6c64-bc90-3ae8-8f7d-72837581ca13", 
     "QuestionnaireId":"8fb1bda7-7ec8-3538-8aa8-ff84637764a4", 
     "Suggestions":"", 
     "Explanation":"", 
     "IsActive":true, 
     "IsDelete":false, 
     "DateCreated":"2016-11-01 09:53:07.000", 
     "DateUpdated":"2016-11-01 09:53:22.000" 
    }, 
    { 
     "PrefrenceId":"ff46ce3c-70cb-3d25-8dbb-10e9c46d4c2d", 
     "UserId":"327e6c64-bc90-3ae8-8f7d-72837581ca13", 
     "QuestionnaireId":"3afffc17-30e4-311f-a0fc-8daa3bda6c98", 
     "Suggestions":"", 
     "Explanation":"", 
     "IsActive":true, 
     "IsDelete":false, 
     "DateCreated":"2016-11-01 09:53:05.000", 
     "DateUpdated":"2016-11-01 09:53:20.000" 
    } 
] 

Мои POJO классы: -

public class SurvivorZAMQuestionList implements Serializable { 
    public List<SurvivorZAMQuestionnaire> survivorZAMQuestionnaires; 
} 


public class SurvivorZAMQuestionnaire implements Serializable { 
    public String Suggestions; 

    public String PrefrenceId; 

    public String IsActive; 

    public String IsDelete; 

    public String DateCreated; 

    public String DateUpdated; 

    public String UserId; 

    public String QuestionnaireId; 

    public String Explanation; 
} 

Но когда я преобразование ответ JSON в JSon это показывает следующее сообщение об ошибке: - com.google.gson .JsonSyntaxException: java.lang.IllegalStateException: ожидается BEGIN_OBJECT, но BEGIN_ARRAY на строке 1 столбец 2

Может ли кто-нибудь сказать мне, что мне не хватает в классе pojo. Любые виды удерживаемых должны быть оценены.

+0

от ошибки, вам нужно изменить формат ответа json или изменить свой метод для ответа fetchig json. Отправьте свой код для более детального решения –

+0

static T getObject (String response, Class clazz) { try { Объект t = clazz.newInstance(); Поле [] fields = clazz.getDeclaredFields(); Gson gson = new Gson(); возвращение (T) gson.fromJson (ответ, clazz); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } null null; } @Divyesh i amd, используя приведенный выше код для преобразования ответа на json –

ответ

2

Ваш ответ правильный, но ваш синтаксический анализ не является правильным. Поэтому, прежде всего, добавьте GSON в свой файл gradle.

compile 'com.google.code.gson:gson:2.4'

Теперь используйте ниже код для синтаксического анализа ответа

try { 
     JSONArray array = new JSONArray("put your response here"); 
     Gson gson = new Gson(); 
     for (int i = 0 ; i <array.length();i++) 
     { 
      SurvivorZAMQuestionnaire obj = new SurvivorZAMQuestionnaire(); 
      obj.add(gson.fromJson(array.getJSONObject(i).toString(),SurvivorZAMQuestionnaire.class)); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

Добавить OBJ в список и показать его :)

1

Ошибка ясно заявляет, что Gson принимает JsonObject не JsonArray , В вашем случае вы можете поместить ответ JsonArray в JsonObject с ключом для этого JsonArray и указать его как annotation в SurvivorZAMQuestionList. Таким образом, вы можете легко решить эту проблему.

Надежда это полезное :)

0

Вы можете попробовать использовать библиотеку GSON ->compile 'com.google.code.gson:gson:2.8.0'

List<SurvivorZAMQuestionnaire> survivorZAMQuestionnaires; 
... 

Gson gson = new Gson(); 
Type listType = new TypeToken<List<SurvivorZAMQuestionnaire>>(){}.getType(); 
survivorZAMQuestionnaires = gson.fromJson(jsonString, listType); 

Type является экземпляром java.lang.reflect.Type;

0

Разбираем Ваш Json таким образом,

List<SurvivorZAMQuestionnaire> survivorZAMQuestionnaires = new  Gson().fromJson(json, new TypeToken<List<SurvivorZAMQuestionnaire>>() { 
    }.getType()); 
+0

Если вы разбираетесь с типом SurvivorZAMQuestionList, вам нужно добавить свой полный json под новый JsonObject с ключом «survivorZAMQuestionnaires». – d4h

0

Выполнение зависимости от градиента gson ,

compile 'com.google.code.gson:gson:2.4' 

Обновить код следующим образом;

private void parseJSON(String jsonMessage) throws JSONException { 
      if (jsonMessage.startsWith("[")) { 
       Type type = new TypeToken<List<SurvivorZAMQuestionnaire>>() 
       }.getType(); 
       List<SurvivorZAMQuestionnaire> survivorZAMQuestionnaireList =new Gson().fromJson 
         (jsonMessage, type); 
       Log.d("Print List",survivorZAMQuestionnaireList.toString()); 
      } 

     } 
+1

Добавьте некоторое объяснение с ответом, как этот ответ помогает OP в устранении текущей проблемы –

Смежные вопросы