Возникли проблемы с десериализацией ответа JSON с помощью gson

Я использую API, в котором я предоставляю входную строку, и она возвращает некоторые автозаполнения ключевых слов и узлы продукта.

Моя цель — десериализовать ответ и получить список строк автозаполнения, которые я могу использовать. Я пытаюсь реализовать это в приложении для Android с помощью библиотеки Retrofit, в которой используется gson.

Во-первых, я не уверен, что мой ответ является типичным ответом JSON. Элемент «узлы» имеет пары ключ/значение, но входная строка и список автозаполнения, похоже, не имеют ключей, которые я могу использовать.

["pol",
["polaroid camera",
"polo",
"polo ralph lauren",
"polo ralph lauren men",
"polar heart rate monitor",
"polaroid",
"polo shirt",
"polar watch",
"police scanner",
"polar"],
[{
     "nodes": [{
        "alias": "electronics",
        "name": "Electronics"
    },
    {
        "alias": "electronics-tradein",
        "name": "Electronics Trade-In"
    }]
},
{

},
{

},
{

},
{

},
{

},
{

},
{

},
{

},
{

}],
[]]

Это моя попытка десериализовать классы java для gson. Однако это не работает, насколько я понимаю, gson нужны переменные класса для соответствия ключам JSON (верно для класса Node, но не для остальных).

class Response {
   String input;
   List<String> keywords;
   List<Node> nodes;
}

class Node {
   String alias;
   String name;
}

person csab    schedule 16.09.2014    source источник


Ответы (1)


в json есть только пара ключей, это в основном массив Json.

если вы можете изменить JSON, сделайте его более похожим на этот

{
   "input" : "pol",
    "keywords" : ["polaroid camera","polo",...],
    "nodes": [{
            "alias": "electronics",
            "name": "Electronics"
        },
        {
            "alias": "electronics-tradein",
            "name": "Electronics Trade-In"
        }]
}
person Dave    schedule 16.09.2014
comment
Да, я это заметил, было бы идеально, если бы ответ был в таком формате. Я надеялся, что будет более элегантное решение, чем манипулирование ответом всякий раз, когда я вызываю API. - person csab; 17.09.2014
comment
сначала проанализируйте его в JSonArray, а затем обработайте каждый элемент отдельно.. но на самом деле это грубый набор действительных json - person Dave; 17.09.2014