abo*_*ket 10 java android gson
我有一个JSON,它可以是单个对象,也可以是同一个对象的数组.有没有办法使用Gson解析这些数据,它会区分单个对象和数组?
我目前唯一的解决方案是手动解析json并使用try catch包围它.首先,我将尝试将其解析为单个对象,如果失败,它将抛出异常,然后我将尝试将其解析为数组.
我不想手动解析它...这将永远带我.这是一个关于发生了什么的想法.
public class ObjectA implements Serializable{
public String variable;
public ObjectB[] objectb; //or ObjectB objectb;
public ObjectA (){}
}
Run Code Online (Sandbox Code Playgroud)
这是可以是数组或单个对象的对象.
public class ObjectB implements Serializable{
public String variable1;
public String variable2;
public ObjectB (){}
}
Run Code Online (Sandbox Code Playgroud)
然后在与json响应交互时.我这样做.
Gson gson = new Gson();
ObjectA[] objectList = gson.fromJson(response, ObjectA[].class);
Run Code Online (Sandbox Code Playgroud)
当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"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
我刚换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);
}
Run Code Online (Sandbox Code Playgroud)
这是我的结果:
{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}]}
Run Code Online (Sandbox Code Playgroud)
我认为在完整的泛型时代,如果你没有特殊的需求,你可以从数组切换到列表,你有很多好处,Gson也可以使用它来进行灵活的解析.
小智 5
尝试使用 com.google.gson.JsonParser。
String jsonString = "object json representation";
JsonParser jsonParser = new JsonParser();
JsonElement jsonElement = jsonParser.parse(jsonString);
if (jsonElement.isJsonArray()) {
// some logic
}
Run Code Online (Sandbox Code Playgroud)
有多种方法可以使用 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
Run Code Online (Sandbox Code Playgroud)
因此,请研究 JsonElement、JsonArray、JsonPrimitive、JsonNull 和 JsonObject 类。相信,他们有足够的接口来恢复您的对象。
| 归档时间: |
|
| 查看次数: |
24389 次 |
| 最近记录: |