2011-10-04 34 views
4

我想解析来自MongoDB云服务器的数据。从服务器返回的json数据如下:如何使用GSON解析这个JSON数据?并把它放入一个ArrayList

[ 
{ 
    "_id": { 
     "$oid": "4e78eb48737d445c00c8826b" 
    }, 
    "message": "cmon", 
    "type": 1, 
    "loc": { 
     "longitude": -75.65530921666667, 
     "latitude": 41.407904566666666 
    }, 
    "title": "test" 
}, 
{ 
    "_id": { 
     "$oid": "4e7923cb737d445c00c88289" 
    }, 
    "message": "yo", 
    "type": 4, 
    "loc": { 
     "longitude": -75.65541383333333, 
     "latitude": 41.407908883333334 
    }, 
    "title": "wtf" 
}, 
{ 
    "_id": { 
     "$oid": "4e79474f737d445c00c882b2" 
    }, 
    "message": "hxnxjx", 
    "type": 4, 
    "loc": { 
     "longitude": -75.65555572509766, 
     "latitude": 41.41263961791992 
    }, 
    "title": "test cell" 
} 

]

我遇到的问题是恢复不包括JSON对象数组的名称的数据结构。每个返回的对象都是一个“帖子”。但是,如果没有JSON对象数组的名称,我该如何使用GSON解析它。我想将这些“帖子”放入Post类型的ArrayList中。

回答

13

的代码,你一块正在寻找:

String jsonResponse = "bla bla bla"; 
Type listType = new TypeToken<List<Post>>(){}.getType(); 
List<Post> posts = (List<Post>) gson.fromJson(jsonResponse, listType); 
+0

这应该是公认的答案。 Sam_D的答案有效,但这段代码看起来要快得多,而且在较大的JSONArray上可能会引人注意。 – Matt

+0

是的,处理大json – Patrick

+0

太棒了!你能解释它是如何工作的吗?第2和第3行 – oyatek

1

使用JSONArray的构造器解析字符串:

//optionally use the com.google.gson.Gson package 
Gson gson = new Gson(); 
ArrayList<Post> yourList = new ArrayList<Post>(); 
String jsonString = "your string"; 
JSONArray jsonArray = new JSONArray(jsonString); 
for (int i = 0; i < jsonArray.length(); i++){ 
    Post post = new Post(); 

    //manually parse for all 5 fields, here's an example for message 
    post.setMessage(jsonArray.get(i).getString("message")); 

    //OR using gson...something like this should work 
    //post = gson.fromJson(jsonArray.get(i),Post.class); 

    yourList.Add(post); 
} 

考虑到只有5场,使用GSON可能比你需要更多的开销。

+0

好吧,我不打算增加更多的领域我的项目继续 –