2012-01-12 2 views
4

Давайте представим, у меня есть класс Java типа:JSON - десериализации динамического объекта с использованием Gson

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); 

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

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

Благодаря

+0

Вы связаны с Гсоном? Ваш случай использования может быть обработан намного лучше с помощью JSON-технологии свободной формы, например json-simple (http://code.google.com/p/json-simple). – Perception

ответ

6

ЗАКАНЧИВАТЬ Serializing and Deserializing Generic Types из GSON Руководства пользователя:

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

десериализовать его:

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

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

+0

Я не думаю, что это помогает OP. Он не знает, какой будет объект, прежде чем он начнет десериализацию. – Perception

0

Смотрите ответ от Кевина Долан по этому вопросу SO: How can I convert JSON to a HashMap using Gson?

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

В качестве альтернативы, вы можете защитить тип вашего объекта верхнего уровня и просто использовать хэш-карты и массивы до упора. Меньше модификация кода Долана.

-1

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

должно быть:

Gson gson=new Gson() 

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

+5

Ваше предложение совершенно эквивалентно оригинальному коду. Это ничего не сделало. – dimo414

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