Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Gson反序列化未知的基本json属性类型_Java_Json_Gson_Deserialization - Fatal编程技术网

Java 如何使用Gson反序列化未知的基本json属性类型

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

在简单的JSONObject(或JSONArray)上使用Gson进行反序列化的最佳方法是什么,但“value”属性可以是整数、布尔或字符串类型

{"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中用错误消息更新代码