Java 如何使用Gson反序列化未知的基本json属性类型
在简单的JSONObject(或JSONArray)上使用Gson进行反序列化的最佳方法是什么,但“value”属性可以是整数、布尔或字符串类型Java 如何使用Gson反序列化未知的基本json属性类型,java,json,gson,deserialization,Java,Json,Gson,Deserialization,在简单的JSONObject(或JSONArray)上使用Gson进行反序列化的最佳方法是什么,但“value”属性可以是整数、布尔或字符串类型 {"label":"Label", "value":56} {"label":"Label", "value":false} {"label":"Label", "value":"string value"} 有课 public class ViewPair { @SerializedName("label") private Str
{"label":"Label", "value":56}
{"label":"Label", "value":false}
{"label":"Label", "value":"string value"}
有课
public class ViewPair {
@SerializedName("label")
private String label;
@SerializedName("value")
private <Unknown> value;
公共类视图对{
@序列化名称(“标签”)
私有字符串标签;
@序列化名称(“值”)
私人价值;
正如Deadpool所建议的那样,我尝试了JsonPrimitive类型,但每当我想从ViewPair中获取如下值时,就会出现错误:
Gson gson=new Gson();
List<ViewPair>data = gson.fromJson(array.toString(), listType);
JSONObject object = item.getJSONObject("value");
String spinnerLabel=object.getString("label");
JsonPrimitive spinnerValue=(JsonPrimitive) object.get("value");<-error
Caused by: java.lang.ClassCastException: java.lang.Boolean cannot be cast to com.google.gson.JsonPrimitive
Gson-Gson=new-Gson();
Listdata=gson.fromJson(array.toString(),listType);
JSONObject对象=item.getJSONObject(“值”);
String spinnerLabel=object.getString(“标签”);
JsonPrimitive spinnerValue=(JsonPrimitive)object.get(“value”);您可以解析它,因为它有检查类型的方法,也有获取值的方法
public class ViewPair {
@SerializedName("label")
private String label;
@SerializedName("value")
private JsonPrimitive value;
}
下面是我测试这三个场景的示例
ViewPair targetObject1 = new Gson().fromJson("{\"label\":\"Label\", \"value\":56}", ViewPair.class);
ViewPair targetObject2 = new Gson().fromJson("{\"label\":\"Label\", \"value\":false}", ViewPair.class);
ViewPair targetObject3 = new Gson().fromJson("{\"label\":\"Label\", \"value\":\"string value\"}", ViewPair.class);
从JsonObject
可以直接获得JsonPrimitive
JsonPrimitive object = item.getAsJsonPrimitive("value");
从JsonPrimitive
可以获得所需类型的值
object.getAsString()
object.getAsInt()
object.getAsBoolean()
您可以将其解析为,因为它有用于检查类型的方法,也有用于获取值的方法
public class ViewPair {
@SerializedName("label")
private String label;
@SerializedName("value")
private JsonPrimitive value;
}
下面是我测试这三个场景的示例
ViewPair targetObject1 = new Gson().fromJson("{\"label\":\"Label\", \"value\":56}", ViewPair.class);
ViewPair targetObject2 = new Gson().fromJson("{\"label\":\"Label\", \"value\":false}", ViewPair.class);
ViewPair targetObject3 = new Gson().fromJson("{\"label\":\"Label\", \"value\":\"string value\"}", ViewPair.class);
从JsonObject
可以直接获得JsonPrimitive
JsonPrimitive object = item.getAsJsonPrimitive("value");
从JsonPrimitive
可以获得所需类型的值
object.getAsString()
object.getAsInt()
object.getAsBoolean()
谢谢,但是我得到了错误java.lang.ClassCastException:java.lang.String不能在JSONObject对象=item.getJSONObject(“值”);JsonPrimitive spinnerValue=(JsonPrimitive)对象.get(“值”)时转换为com.google.gson.JsonPrimitive;您不应该进行类型转换,请在jsonement
上使用getAsJsonPrimitive
获取基元类型,如果您有任何问题,请在上面的post@Tahathanks中使用错误消息更新代码,但我得到错误java.lang.ClassCastException:JSONObject o时,java.lang.String无法转换为com.google.gson.JsonPrimitiveobject=item.getJSONObject(“value”);JsonPrimitive spinnerValue=(JsonPrimitive)object.get(“value”);您不应该执行类型转换,请在jsoneElement
上使用getAsJsonPrimitive
获取原语类型,如果您有任何问题,请在上面的post@Taha中用错误消息更新代码