JSON - десериализация динамического объекта с использованием Gson - PullRequest
7 голосов
/ 12 января 2012

Давайте представим, что у меня есть класс Java типа:

public class MyClass
{
   public String par1;
   public Object par2;
}

Тогда у меня есть это:

String json = "{"par1":"val1","par2":{"subpar1":"subval1"}}";

Gson gson = new GsonBuilder.create();
MyClass mClass = gson.fromJson(json, MyClass.class);

JSON par2 дан мне из какого-то другого приложенияи я никогда не знаю, что это за имена параметров, так как они являются динамическими.

Мой вопрос заключается в том, на какой тип класса должна быть установлена ​​переменная par2 в MyClass, чтобы переменная JSON String была правильнойдесериализован в мой объект класса?

Спасибо

Ответы [ 4 ]

7 голосов
/ 12 января 2012

Извлечение Сериализация и десериализация универсальных типов из Руководства пользователя GSON:

public class MyClass<T>
{
   public String par1;
   public T par2;
}

Для десериализации:

Type fooType = new TypeToken<Myclass<Foo>>() {}.getType();
gson.fromJson(json, fooType);

Надеюсь, что это поможет.

0 голосов
/ 22 мая 2019

если ваш объект имеет динамическое имя внутри, скажем так:

{
    "Includes": {
        "Products": {
            "blablabla": {
                "CategoryId": "this is category id",
                "Description": "this is description",
                ...
}

Вы можете сериализовать его с помощью:

MyFunnyObject data = new Gson().fromJson(jsonString, MyFunnyObject.class);

@Getter
@Setter
class MyFunnyObject {
    Includes Includes;
    class Includes {
        Map<String, Products> Products;
        class Products {
            String CategoryId;
            String Description;
        }
    }
}

позже вы можете получить к нему доступ:

data.getIncludes().get("blablabla").getCategoryId()

0 голосов
/ 12 января 2012

этот код: Gson gson = new GsonBuilder.create();

должен быть:

Gson gson=new Gson()

Я думаю (если вы анализируете документ JSON).

0 голосов
/ 12 января 2012

См. Ответ Кевина Долана на этот SO вопрос: Как я могу преобразовать JSON в HashMap, используя Gson?

Обратите внимание, это не принятый ответ, и вывероятно, придется немного его изменить.Но это довольно круто.

Кроме того, вы можете отказаться от безопасности типов вашего объекта верхнего уровня и просто использовать хеш-карты и массивы до конца.Таким образом, меньше изменений в коде Долана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...