-1
J'ai une réponse JSON:Comment diviser un objet JSON en une liste (GSON, Android)?
{
"address": "0a1ac9b9a342c3600995845eec7254df664d6aa9",
"workers": {
"desktop-380h0l6": {
"worker": "desktop-380h0l6",
"hashrate": "92.2 MH/s",
"reportedHashRate": "81.6 MH/s",
"validShares": 81,
"invalidShares": 0,
"staleShares": 3,
"workerLastSubmitTime": 1499408997,
"invalidShareRatio": 0
},
"eco-001": {
"worker": "eco-001",
"hashrate": "121.1 MH/s",
"reportedHashRate": "130.1 MH/s",
"validShares": 109,
"invalidShares": 0,
"staleShares": 0,
"workerLastSubmitTime": 1499408985,
"invalidShareRatio": 0
},
"eco-002": {
"worker": "eco-002",
"hashrate": "114.1 MH/s",
"reportedHashRate": "108.5 MH/s",
"validShares": 102,
"invalidShares": 0,
"staleShares": 1,
"workerLastSubmitTime": 1499408993,
"invalidShareRatio": 0
},
"eco-003": {
"worker": "eco-003",
"hashrate": "125.5 MH/s",
"reportedHashRate": "129.6 MH/s",
"validShares": 111,
"invalidShares": 0,
"staleShares": 3,
"workerLastSubmitTime": 1499408969,
"invalidShareRatio": 0
}
}
J'ai besoin de diviser l'objet « travailleurs » dans la liste. Comment puis-je faire ceci? Dans mon projet j'utilise Retrofit avec GSON. Je pensais que ce code m'aiderait, mais je me suis trompé:
public class WorkersDeserializer implements JsonDeserializer<Workers> {
@Override
public Workers deserialize(JsonElement json,
Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
final JsonObject jsonObject = json.getAsJsonObject();
List<Worker> list = new LinkedList<>();
jsonObject.entrySet().forEach(new Consumer<Map.Entry<String, JsonElement>>() {
@Override
public void accept(Map.Entry<String, JsonElement> stringJsonElementEntry) {
list.add(context.deserialize(stringJsonElementEntry.getValue(), Workers.class));
}
});
Workers w =new Workers();
w.setWorkers(list);
return w;
}
}
Nous vous remercions de votre aide.
Avez-vous le contrôle de la source JSON? Si oui, faire un tableau à 'workers' sera beaucoup plus facile. La clé n'est pas nécessaire car elle est déjà dans l'objet. – Joshua
@Joshua Malheureusement, je n'ai pas un tel contrôle. Avez-vous des idées sur la façon de diviser? –