2012-08-17 89 views
1

我有点卡住了以下问题。JSON到Java对象

从MongoDB中,我得到这个JSON字符串,我想获得'photo'的所有值,并将它们放入ArrayList中。我找到了一些例子,但他们不适合我。我使用的是GSON,但是JSON解决方案也可以。从MongoDB的

返回:

[ { "url" : "/photos/avatar-1.jpg" , "photo" : "avatar-1.jpg" , "description" : "test  1"} , { "url" : "/photos/avatar-2.jpg" , "photo" : "avatar-2.jpg" , "description" : "test 2"} , { "url" : "/photos/avatar-3.jpg" , "photo" : "avatar-3.jpg" , "description" : "test 3"} , { "url" : "/photos/avatar-4.jpg" , "photo" : "avatar-4.jpg" , "description" : "test 4"}] 

投入一个ArrayList是没有问题的,但得到的 '照片' 的价值。如果有人可以给我一个关于如何循环访问'photo'值的4个数组和一个System.out.println的例子,那太棒了!

谢谢!

回答

2
jsonString =[...]; 
Gson gson = new Gson(); 
PhotoDTO[] photos = gson.fromJson(jsonString, PhotoDTO[].class); 

for(PhotoDTO photo : photos){ 
    System.out.println("photo -> " + photo.getPhoto()); 
} 

PhotoDTO类定义

class PhotoDTO 
{ 
    String url; 
    String photo; 
    String description; 
    // setters & getters methods 
} 
+0

谢谢!这工作。 PhotoDTO []中的[]是我错过的。 – 2012-08-17 13:44:50

2

使用优秀json-simple库,你应该能够做这样的事情:

String json = "[{\"photo\": \"1.png\"}, {\"photo\": \"2.png\"}, " + 
       "{\"photo\": \"3.png\"}, {\"photo\": \"4.png\"}]"; 
JSONArray photos = (JSONArray)JSONValue.parse(json); 
for (int index = 0; index < photos.size(); index++) { 
    JSONObject photoObj = (JSONObject)photos.get(index); 
    System.out.println(photoObj.get("photo")); 
} 

显然替换,你从你的数据库中获取数据字面JSON文本。

+0

也谢谢!这也有诀窍。 – 2012-08-17 13:45:45

0

而不产生的DTO,使用GSON StringMap类的另一种选择:

String json = "[ { \"url\" : \"/photos/avatar-1.jpg\" , \"photo\" : \"avatar-1.jpg\" , \"description\" : \"test  1\"} , { \"url\" : \"/photos/avatar-2.jpg\" , \"photo\" : \"avatar-2.jpg\" , \"description\" : \"test 2\"} , { \"url\" : \"/photos/avatar-3.jpg\" , \"photo\" : \"avatar-3.jpg\" , \"description\" : \"test 3\"} , { \"url\" : \"/photos/avatar-4.jpg\" , \"photo\" : \"avatar-4.jpg\" , \"description\" : \"test 4\"}]"; 

Gson gson = new Gson();  
Type type = new TypeToken<List<StringMap<String>>>(){}.getType(); 
List<StringMap<String>> stringMaps = gson.fromJson(json, type); 
for (StringMap<String> map:stringMaps) { 
    System.out.println(map.get("photo")); 
} 

编辑

进口:

import com.google.gson.Gson; 
import com.google.gson.internal.StringMap; 
import com.google.gson.reflect.TypeToken;