com.google.gson.JSONObject не может быть преобразован в com.google.gson.JSONArray

#java #api #okhttp #unirest

#json #Кастинг #массивы

Вопрос:

У меня возникли некоторые проблемы с синтаксическим анализом ответа JSON. Данные ответа:

 {
    "deal": {
        "categorie": {
            "description": "Offres Shopping",
            "idcategorie": "1",
            "nom": "Shopping"
        },
        "conditions": "2 personne au plus",
        "dateAjout": "2013-01-07T00:00:00 01:00",
        "dateExp": "2013-01-31T00:00:00 01:00",
        "description": "nuit dans un hotel 5 etoile",
        "heurexp": "12",
        "iddeal": "1",
        "minutesexp": "30",
        "prestataire": {
            "adresse": "Qu zohour 44",
            "codePostale": "12600",
            "description": "Hotel 5 etoiles",
            "idprestataire": "1",
            "nom": "Hotel ronald",
            "pays": "France",
            "telephone": "99999999",
            "ville": "Brest"
        },
        "prix": "80.0",
        "prixHabituel": "200.0",
        "tags": "hotel",
        "titre": "Nuit 5 etoiles"
    }
}
  

При попытке проанализировать этот ответ на List<Deal> я получаю это исключение:

com.google.gson.JSONObject не может быть преобразован в com.google.gson.JSONArray

Это код, который я использую для синтаксического анализа:

 if (reponse != null amp;amp; !reponse.isEmpty()) {
System.out.println(reponse);

Gson g = new Gson();
JsonParser parser = new JsonParser();
JsonObject jObject = parser.parse(reponse).getAsJsonObject();
JsonArray jArray =  jObject.getAsJsonArray("deal");  // here goes the Exception
for (JsonElement elem : dealArray) {
deals.add(g.fromJson(elem, Deal.class));
}

    System.out.println(deals.toString());
    return "success";
}
  

Спасибо

Ответ №1:

Ну, deal это не массив JSON, это объект JSON. Отсюда и исключение. Массив JSON для справки выглядел бы примерно так:

 "deal" : [{"attr" : "value"}, {"attr" : "value"}]
  

Комментарии:

1. да, но когда я вызываю jsonObejct.getAsJsonArray («сделка»), я хочу получить JSONArray, у меня возникает это исключение

2. Я не уверен, как это разбить дальше, вы не можете получить массив JSON из вашего объекта, потому что в нем нет массива. Во всем JSON, который вы опубликовали, буквально нет массива. Возможно, вы пытаетесь получить доступ к атрибутам deal ?

3. да, но я использую библиотеку Google для json Gson, и она предлагает такую возможность преобразовать JSONObject в JSONArray, но я не знаю, почему у меня эта ошибка

4. Хорошо, обяжите меня здесь. Перед выполнением преобразования добавьте эту строку в свой код и сообщите мне результат — System.out.println("Is Array: " jsonObject.get("deal").isJsonArray());

5. Я хочу преобразовать JSONObject в JSONArray, чтобы создать свой объект, используя new Gson().from(JsonElement,Deal.class )