我需要使用Gson将json字符串解析为Java对象(即产品)。这是我的问题:在两种情况下,产品的json字符串将包含Items(即json数组)的列表或仅包含具有相同json键的Item(即json对象)。如何在Product类中声明项目变量以进行如下分析?如果我声明列表,那么它在对象情况下将失败,反之亦然。
public class Product {
@SerializedName("item-content")
@Expose
private List<Item> itemsContent = null;
//OR
@SerializedName("item-content")
@Expose
private Item itemContent = null;
}
这是我如何使用gson将json转换为模型。
public static <T> T getJavaObjectFromJsonString(String jsonString, Class<T> class1) {
T obj = null;
try {
obj = getGsonInstance().fromJson(jsonString, class1);
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
public static Gson getGsonInstance() {
if (gson == null) {
gson = new GsonBuilder().setLenient().create();
}
return gson;
}
答案 0 :(得分:0)
您必须使用Gson自定义解析器:
public class Product implements JsonDeserializer<Product> {
private List<Item> itemsContent = null;
private Item itemContent = null;
@Override
public Product deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
Gson gson = new GsonBuilder().create();
Product product = new Product();
JsonElement itemsContent = jsonObject.get("item-content");
if (itemsContent.isJsonObject()) this.itemsContent = gson.fromJson(itemContent, Item.class);
else this.itemContent = gson.fromJson(itemsContent, new TypeToken<List<Item>>(){}.getType());
return product;
}
}
然后解析您的产品对象,如下所示:
new GsonBuilder().registerTypeAdapter(Product.class, new Product()).create().fromJson(response.toString(), Product.class);
答案 1 :(得分:-1)
导入com.google.gson.JsonObject;
导入com.google.gson.JsonParser;
JsonParser jsonParser =新的JsonParser();
JsonObject jsonObj =(JsonObject)jsonParser.parse(retValue); // retValue = JSONObject
您为什么不使用Gson的JsonParser?