Как анализировать динамические поля JSON с помощью GSON?

#java #json #api #gson

#java #json #API #gson

Вопрос:

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

Вот пример данных JSON, возвращаемых по запросу:

 {

-
30655845: {
    id: "30655845"
    name: "testdata
    description: ""
    latitude: "38"
    longitude: "-122"
    altitude: "0"
    thumbnailURL: http://someimage.com/url.jpg
    distance: 9566.6344386665
}
-
28688744: {
    id: "28688744"
    name: "testdata2"
    description: ""
    latitude: "38"
    longitude: "-122"
    altitude: "0"
    thumbnailURL: http://someimage.com/url.jpg
    distance: 9563.8328713012
}
}
  

В настоящее время я обрабатываю отдельные статические значения с помощью класса:

 import com.google.gson.annotations.SerializedName;

public class Result 
{
@SerializedName("id")
public int id;

@SerializedName("name")
public String name;

@SerializedName("description")
public String description;

@SerializedName("latitude")
public Double latitude;

@SerializedName("longitude")
public Double longitude;

@SerializedName("altitude")
public Double altitude;

@SerializedName("thumbnailURL")
public String thumbnailURL;

@SerializedName("distance")
public Double distance;
}
  

И тогда я могу просто использовать GSON для анализа этого:

 Gson gson = new Gson();

Reader reader = new InputStreamReader(source);

Result response= gson.fromJson(reader, Result.class);
  

Я знаю, что это работает с вложенными данными, поскольку я могу запросить и получить единственную запись и проанализировать ее довольно легко, но как насчет случайных целых значений, заданных для каждого значения в массиве? (т.е. 30655845 и 2868874)

Любая помощь?

Ответ №1:

Согласно документации GSON, вы можете делать такие вещи, как:

 Type mapType = new TypeToken<Map<Integer, Result> >() {}.getType(); // define generic type
Map<Integer, Result> result= gson.fromJson(new InputStreamReader(source), mapType);
  

Или вы можете попробовать написать пользовательский сериализатор для своего класса.

Отказ от ответственности: у меня тоже нет опыта работы с GSon, но с другими фреймворками, такими как Jackson.

Комментарии:

1. Есть ли какой-либо способ проанализировать то же самое, но с использованием NewtonSoft?