2017-07-07 28 views
-1

我有一些JSON響應:如何將JSON對象拆分爲列表(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 
    } 
} 

我需要將對象「工人」分成列表。我怎樣才能做到這一點?在我的項目中,我使用GSON進行改造。我認爲這樣的代碼會幫助我,但我錯了:

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

謝謝你的幫助。

+0

你有JSON源的控制?如果是的話,使'工作人員'數組將變得更容易。關鍵是不需要的,因爲它已經在對象中。 – Joshua

+0

@Joshua 不幸的是,我沒有這樣的控制。你有一些想法如何分裂? –

回答

0

爲什麼不把它反序列化爲Map,然後將它的值收集到列表中?

Workers.java:

public class Workers { 
    @SerializedName("address") 
    private String mAddress; 

    @SerializedName("workers") 
    private Map<String, Worker> mWorkers; 

    /* ... */ 
} 

然後:

Workers workers = new Gson().fromJson(json, Workers.class); 
List<Worker> = new ArrayList<>(workers.getWorkers().values()); 
相關問題