如何使用Gson反序列化未知的原始json属性类型

时间:2020-02-23 04:13:41

标签: java json gson deserialization

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

a=1:10
b=11:20
c=21:30
Data=cbind(a,b,c)
Density3Dd <- kde3d(Data[,1], Data[,2], Data[,3], n = 3)

同班

df2 <- structure(list(A = 1:3, B = c(20L, 7L, 52L)), class = "data.frame", 
row.names = c(NA, 
-3L))

df1 <- structure(list(A = 1:6, B = c(15L, 20L, 13L, 7L, 52L, 78L)), class = 
"data.frame", row.names = c(NA, 
-6L))

正如Deadpool所建议的那样,我尝试了JsonPrimitive类型,但是每当我想从ViewPair获取这样的值时都会出错:

{"label":"Label", "value":56}
{"label":"Label", "value":false}
{"label":"Label", "value":"string value"}

1 个答案:

答案 0 :(得分:4)

您可以将其解析为JsonPrimitive,因为它具有检查类型isBooleanisNumberisString的方法以及获取值的方法

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()
相关问题