使用GSONparsingjson对象vs json数组

我有一个JSON是单个对象或同一个对象的数组。 有没有一种方法来parsing这个数据使用Gson它将区分单个对象与数组?

我目前唯一的解决scheme是手动parsingjson并用try catch包围它。 首先,我将尝试parsing它作为一个单一的对象,如果它失败了,它会抛出一个exception,然后我会尝试parsing它作为一个数组。

我不想手动parsing它,但这将永远需要我。 这里有一个发生了什么事情的想法。

public class ObjectA implements Serializable{ public String variable; public ObjectB[] objectb; //or ObjectB objectb; public ObjectA (){} } 

这是可以是数组或单个对象的对象。

 public class ObjectB implements Serializable{ public String variable1; public String variable2; public ObjectB (){} } 

然后当与json响应进行交互时。 我正在这样做。

 Gson gson = new Gson(); ObjectA[] objectList = gson.fromJson(response, ObjectA[].class); 

当ObjectA的数组被串行化时,json包含ObjectB的数组或单个对象。

 [ { "variable": "blah blah", "objectb": { "variable1": "1", "variable2": "2" } }, { "variable": "blah blah", "objectb": { "variable1": "1", "variable2": "2" } }, { "variable": "blah blah", "objectb": [ { "variable1": "1", "variable2": "2" }, { "variable1": "1", "variable2": "2" } ] } ] 

Solutions Collecting From Web of "使用GSONparsingjson对象vs json数组"

我只是将ObjectB[]更改为List<ObjectB>ObjectA声明中。

 ArrayList<ObjectA> la = new ArrayList<ObjectA>(); List<ObjectA> list = new Gson().fromJson(json, la.getClass()); for (Object a : list) { System.out.println(a); } 

这是我的结果:

 {variable=blah blah, objectb={variable1=1, variable2=2}} {variable=blah blah, objectb={variable1=1, variable2=2}} {variable=blah blah, objectb=[{variable1=1, variable2=2}, {variable1=1, variable2=2}]} 

我认为在完全generics时代,如果你没有特别的需求,你可以从数组切换到列表,你有很多好处,Gson也可以用来做一个灵活的parsing。

尝试使用com.google.gson.JsonParser。

  String jsonString = "object json representation"; JsonParser jsonParser = new JsonParser(); JsonElement jsonElement = jsonParser.parse(jsonString); if (jsonElement.isJsonArray()) { // some logic } 

有不同的方法可以使用JsonElement实例获取对象,例如简单地使用com.google.gson.Gson方法:

 public <T> T fromJson(com.google.gson.JsonElement json, java.lang.Class<T> classOfT) throws com.google.gson.JsonSyntaxException public <T> T fromJson(com.google.gson.JsonElement json, java.lang.reflect.Type typeOfT) throws com.google.gson.JsonSyntaxException 

因此,研究JsonElement,JsonArray,JsonPrimitive,JsonNull和JsonObject类。 相信,他们有足够的界面来恢复你的对象。

你可以尝试/抓住它首先试图parsing数组,然后回落到parsing单个对象类?

你也可以做一个真正简单的testing,并查看string中的第一个非空白字符,如果它是一个“{”它是一个单独的对象,如果它是一个“[”它是一个数组