Имате проблеми с десериализиране на 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