2012-09-08 48 views
0
{ 
    "status":1, 
    "list": 
     { 
      "218888771": 
       { 
        "item_id":"218888771", 
        "title":"twitter", 
        "url":"http:\/\/t.co\/oFYGY7z0", 
        "time_updated":"1347094862", 
        "time_added":"1347094862", 
        "state":"0" 
       }, 
      "217345740": 
       { 
        "item_id":"217345740", 
        "title":"", 
        "url":"http:\/\/t.co\/dCvNwtrK", 
        "time_updated":"1346790837", 
        "time_added":"1346790700", 
        "state":"0" 
       } 
     }, 
    "since":1347094862, 
    "complete":1 
} 

我使用谷歌GSon,但沒有真正得到任何地方。無法解析此使用谷歌Gson在java

首先我很困惑,爲什麼我不能把它當作JsonArray。 「list」看起來像一個json數組。但它似乎並不奏效。我不介意使用POJO方法來做這件事,但我該如何解析這個JSONArray呢?

JsonParser parser = new JsonParser(); 
    JsonElement tradeElement = parser.parse(response); 
    JsonObject trade = tradeElement.getAsJsonObject(); 
    json.get("list").getAsJsonObject().get("url") 

這給了我空。

回答

1
{ 
    "complete":1, 
    "list":{ 
     "217345740":{ 
     "item_id":"217345740", 
     "state":"0", 
     "time_added":"1346790700", 
     "time_updated":"1346790837", 
     "title":"", 
     "url":"http://t.co/dCvNwtrK" 
     }, 
     "218888771":{ 
     "item_id":"218888771", 
     "state":"0", 
     "time_added":"1347094862", 
     "time_updated":"1347094862", 
     "title":"twitter", 
     "url":"http://t.co/oFYGY7z0" 
     } 
    }, 
    "since":1347094862, 
    "status":1 
} 

正如你可以看到當這是很好格式化list是具有兩個屬性217345740218888771的對象。一個數組括在括號內[]。這就是爲什麼你無法將其轉換爲數組。

您的最佳選擇是正確使用gson及其將j​​son解析爲POJO的能力。 這是完全沒有經過測試的(我不知道Gson這麼多,我不在我的開發機器上),但你會看到這個想法。

public class Item { 
    long item_id; 
    int state; 
    @SerializedName("time_added") 
    Date timeAdded; 
    @SerializedName("time_updated") 
    Date timeUpdated; 
    String title; 
    String url; 

    // getter & setters 
} 

public class Trade { 
    int complete; 
    Date since; 
    int status; 
    Map<Long, Item> list; 

    // getter & setters 
} 

public class Foo { 
    public static void main(String[] args) { 
     String json = ""; 

     GsonBuilder builder = new GsonBuilder(); 
     builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { 
      public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { 
       return new Date(json.getAsJsonPrimitive().getAsLong()); 
      } 
     }); 
     Gson gson = builder.create(); 
     Trade trade = gson.fromJson(json, Trade.class); 
     Map<Long, Item> items = trade.getList(); 
     System.out.println(items.get(217345740L).getUrl()); // should print http://t.co/dCvNwtrK 
    } 
} 
+0

我到底該如何解析呢? – Hick

+0

@Puck見我的編輯 – Alex

0

JSON數組將如下所示:

[ 
    { 
     "item_id":"218888771", 
     "title":"twitter", 
     "url":"http:\/\/t.co\/oFYGY7z0", 
     "time_updated":"1347094862", 
     "time_added":"1347094862", 
     "state":"0" 
    }, 
    { 
     "item_id":"218888771", 
     "title":"twitter", 
     "url":"http:\/\/t.co\/oFYGY7z0", 
     "time_updated":"1347094862", 
     "time_added":"1347094862", 
     "state":"0" 
    }, 
] 

上面一個是地圖的JSONArray。由於您的數據是地圖的地圖,因此您應該使用適當的鍵瀏覽地圖,然後進入具有「url」鍵的最內層地圖。