2012-12-03 138 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()); 
相关问题