2013-08-24 158 views
85

我有一个JSON文件是这样的:使用GSON解析JSON数组

[ 
    { 
     "number": "3", 
     "title": "hello_world", 
    }, { 
     "number": "2", 
     "title": "hello_world", 
    } 
] 

之前文件时有一个根元素,我会用:

Wrapper w = gson.fromJson(JSONSTRING, Wrapper.class); 

代码,但我想不出如何编写Wrapper类作为根元素是一个数组。

我已经尝试使用:

Wrapper[] wrapper = gson.fromJson(jsonLine, Wrapper[].class); 

有:

但还没有任何运气。我怎么才能使用这种方法读取这个?

P.S我有这个利用工作:

JsonArray entries = (JsonArray) new JsonParser().parse(jsonLine); 
String title = ((JsonObject)entries.get(0)).get("title"); 

但是我宁愿知道如何使用这两种方法做到这一点(如果可能)。

+2

你肯定有标题元素后,逗号?如果你删除它们'Wrapper [] data = gson.fromJson(jElement,Wrapper []。class);'对我来说工作正常。 – Pshemo

+0

这就是问题..这么简单的错误! – Edd

回答

88

问题是由数组的最后一个元素后面的逗号引起的(每个title之后)。如果你删除它,你的数据更改为

[ 
    { 
     "number": "3", 
     "title": "hello_world" 
    }, { 
     "number": "2", 
     "title": "hello_world" 
    } 
] 

Wrapper[] data = gson.fromJson(jElement, Wrapper[].class); 将正常工作。

33
Gson gson = new Gson(); 
Wrapper[] arr = gson.fromJson(str, Wrapper[].class); 

class Wrapper{ 
    int number; 
    String title;  
} 

似乎工作正常。但是你的字符串中还有一个额外的,逗号。

[ 
    { 
     "number" : "3", 
     "title" : "hello_world" 
    }, 
    { 
     "number" : "2", 
     "title" : "hello_world" 
    } 
] 
9
public static <T> List<T> toList(String json, Class<T> clazz) { 
    if (null == json) { 
     return null; 
    } 
    Gson gson = new Gson(); 
    return gson.fromJson(json, new TypeToken<T>(){}.getType()); 
} 

调用示例:

List<Specifications> objects = GsonUtils.toList(products, Specifications.class); 
+2

对我来说,这是把我的对象变成一个LinkedTreeMap列表,而不是一个规范对象列表(例如)。 –

+0

你从哪里获得GsonUtils课程? –

+0

''GsonUtils''是他自己的''toList()''方法的类。 – user1438038