2014-09-01 34 views
0

我使用GsonRequest來序列化我的數據。不過,我有這樣的情況:GsonRequest有解析地圖的問題

這是JSON數據:

[...] 
"u": { 
     "53bde5b5e4fc4978c0000015": { 
      "la": 40.772673, 
      "lo": 9.6657388 
    }, ... 

我序列化數據提供:

public class ClusterResult extends SingleElement{ 
    public Integer count; 
    public ClusterData[] c; 
    public HashMap<String, ClusterUnit> u; 
} 

(有圖是一樣的)

任何想法如何改變?我使用GsonRequest類來序列化數據(https://gist.github.com/ficusk/5474673)。

謝謝:)

回答

0

你爲什麼不嘗試換你ClusterUnit在一類和使用自定義解串器?也許我不明白你的問題,如果是這樣,讓我知道。這是我做的:

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import com.google.gson.JsonDeserializationContext; 
import com.google.gson.JsonDeserializer; 
import com.google.gson.JsonElement; 
import com.google.gson.JsonParseException; 
import java.lang.reflect.Type; 
import java.util.Map; 

/** 
* 
* @author astinx 
*/ 
public class Test { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     new Test().run(); 
    } 

    public class ClusterUnitWrapped { 
     String id; //53bde5b5e4fc4978c0000015 
     Double la; 
     Double lo; 

     private ClusterUnitWrapped(String id, Double la, Double lo) { 
      this.id = id; this.la = la; this.lo = lo; 
     } 

     @Override 
     public String toString() { 
      return "ClusterUnitWrapped{" + "id=" + id + ", la=" + la + ", lo=" + lo + '}'; 
     } 

    } 

    public class ClusterUnitRequest { 
     //... 
     ClusterUnitWrapped u; 

     //... 
     @Override 
     public String toString() { 
      return "ClusterUnitRequest{" + "u=" + u + '}'; 
     } 
    } 

    private class ClusterUnitDeserializer implements JsonDeserializer<ClusterUnitWrapped> { 
     public ClusterUnitWrapped deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 
      throws JsonParseException { 
      for (Map.Entry<String, JsonElement> map : json.getAsJsonObject().entrySet()) { 
       String id = map.getKey().toString(); //Obviously is going to iterate only once. 
       Double la = map.getValue().getAsJsonObject().get("la").getAsDouble(); 
       Double lo = map.getValue().getAsJsonObject().get("lo").getAsDouble(); 
       return new ClusterUnitWrapped(id, la, lo); 
      } 
      return null; 
     } 
    } 

    private void run() { 
     String json = "{\"u\":{\"53bde5b5e4fc4978c0000015\": { \"la\": 40.772673, \"lo\":9.6657388}}}"; 
     Gson gson = new GsonBuilder() 
       .registerTypeAdapter(ClusterUnitWrapped.class, new ClusterUnitDeserializer()) 
       .create(); 
     ClusterUnitRequest u = gson.fromJson(json, ClusterUnitRequest.class); 
     System.out.println(u.toString()); 
    } 

} 
+0

這不是我使用的代碼的實際版本,但它真的很鼓舞人心,謝謝! :) – Filnik 2014-09-02 00:38:09