Как использовать Google Json Parsing API (Gson) для анализа некоторых динамических полей в моем json? - PullRequest
5 голосов
/ 27 января 2011

У меня есть структурированный Json, который может изменяться в некоторых областях, как я могу правильно проанализировать (десериализовать) его в Java с помощью Gson google json api?

Пример Json:

{ 
type: 'sometype',
fields: {
    'dynamic-field-1':[{value: '', type: ''},...],
    'dynamic-field-2':[{value: '', type: ''},...],
...
}

Динамические поля изменят свое имя в зависимости от отправленной структуры.

Есть ли способ?

Ответы [ 3 ]

8 голосов
/ 27 января 2011

Вы можете использовать пользовательскую (де) сериализацию, как предлагает Раф Левиен, однако Gson по-своему понимает карты.

Если вы запустите это, вы получите вывод {"A": "B"}

Map<String, String> map = new HashMap<String, String>();
map.put("A", "B");
System.out.println(new Gson().toJson(src));

Карта теперь может содержать ваши динамические ключи. Чтобы снова прочитать этот Json, вам нужно сообщить Gson об информации о типе через TypeToken, который является способом записи информации о типе во время выполнения, которую стирает Java.

Map fromJson = 
    new Gson().fromJson(
        "{\"A\":\"B\"}", 
        new TypeToken<HashMap<String, String>>() {}.getType());
System.out.println(fromJson.get("A"));

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

3 голосов
/ 01 декабря 2011

Используя google-gson Я делаю это так:

JsonElement root = new JsonParser().parse(jsonString);

и тогда вы можете работать с JSON. e.g.:

String value = root.getAsJsonObject().get("type").getAsString();
1 голос
/ 27 января 2011

Да, напишите собственный десериализатор, который принимает универсальный объект JsonElement. Вот пример:

http://benjii.me/2010/04/deserializing-json-in-android-using-gson/

...