2012-12-03 190 views
1

我想解析一個JSON對象的字符串表示到地圖列表中。 JSON對象的結構將類似於以下內容:在運行時只解析JsonObject以使用Gson列出<Map <String,Object >>?

[ 
{  
    "first_name": "fname1", 
    "last_name": "lname1" 
}, 
{ 
    "first_name": "fname2", 
    "last_name": "lname2" 
} 
. 
. 
. 
] 

所知道的唯一的事情是字符串值(例如「FIRST_NAME」,「姓氏」),所以我不能創造任何預定義的類(如fromJson()方法中通常使用的類)。

我試圖創建下面的函數(我看到一些例子後在線),並沒有工作:

public List<Map<String, Object>> fromJson(String jsonAsString) { 
    final JsonElement jsonElement = this.jsonParser.parse(jsonAsString); 

    List<Map<String, Object>> myList= new ArrayList<Map<String, Object>>(); 
    Type listType = TypeToken.get(myList.getClass()).getType(); 
    myList= (new Gson()).fromJson(jsonElement, listType); 

    return myList; 
} 

此函數的結果是一個列表(長度== 2上面的情況),而不是2個地圖我得到2個對象。

任何幫助? 謝謝!

回答

2

我不太瞭解您使用TypeToken

TypeToken的一點是通過創建擴展了你想捕捉,使用以下語法類型參數泛型超匿名類捕捉參數化類型(如List<...>):

new TypeToken<... type you want to capture ...>() {}.getType() 

你的情況它應該被用來如下:

myList = new Gson().fromJson(jsonAsString, 
    new TypeToken<List<Map<String, Object>>>() {}.getType()); 
0

您不能使用泛型這樣,在運行時List<Map<String, Object>> myList相同List<Object> myList

你可以用地圖的數組嘗試

Gson gson = new Gson(); 
    Map[] x = new Map[0]; 
    Map[] fromJson = gson.fromJson("[\r\n" + 
      " {  \r\n" + 
      " \"first_name\": \"fname1\",\r\n" + 
      " \"last_name\": \"lname1\"\r\n" + 
      " },\r\n" + 
      " {\r\n" + 
      " \"first_name\": \"fname2\",\r\n" + 
      " \"last_name\": \"lname2\"\r\n" + 
      " }]",x.getClass()); 
相關問題