改造解析动态 JSON 响应键 (Android)
Retrofit parse dynamic JSON response key (Android)
我有下面给出的 JSON 结构。如您所见,branch 键可以是数组或对象。我该如何处理?基本上,如果 branch 的实例超过 1 个,它就会变成一个数组,否则它会继续显示一个对象。我该如何处理。它在运行时给我一个转换错误,因为我的 POJO class 包含 Branch branch
,这是一个对象 decleration。如果我想处理数组 decleration,它将是 Branch[] branch
。我怎样才能让 Branch
class 根据每个 tree_type
的位置动态表现。
tree: [
{
tree_type:
{
branch:
{
field1 :val1
field2 : val2
}
}
tree_type:
{
branch:
{
field1 :val1
field2 : val2
}
}
tree_type:
{
branch:
[
{
field1 :val1
field2 : val2
}
{
field1 :val1
field2 : val2
}
{
field1 :val1
field2 : val2
}
]
}
}
],
您必须检索并检查 "branch" 对象的类型。
试试这个:
List<Branch> branches = new ArrayList<>();
if (jsonObject.has("branch") && jsonObject.get("branch") instanceof JSONObject) {
// it is a JSONObject
JSONObject branch = jsonObject.getJSONObject("branch");
// parse your branch : Branch branchObject = ...
branches.add(branchObject);
} else if (jsonObject.has("branch") && jsonObject.get("branch") instanceof JSONArray) {
// it is an JSONArray
JSONArray branchArray = jsonObject.getJSONArray("branch");
// loop branches
for (int i = 0; i < branchArray.length(); i++)
{
if (branchArray.get(i) instanceof JSONObject) {
JSONObject branch = branchArray.getJSONObject(i);
// parse your branch : Branch branchObject = ...
branches.add(branchObject);
}
}
}
我有下面给出的 JSON 结构。如您所见,branch 键可以是数组或对象。我该如何处理?基本上,如果 branch 的实例超过 1 个,它就会变成一个数组,否则它会继续显示一个对象。我该如何处理。它在运行时给我一个转换错误,因为我的 POJO class 包含 Branch branch
,这是一个对象 decleration。如果我想处理数组 decleration,它将是 Branch[] branch
。我怎样才能让 Branch
class 根据每个 tree_type
的位置动态表现。
tree: [
{
tree_type:
{
branch:
{
field1 :val1
field2 : val2
}
}
tree_type:
{
branch:
{
field1 :val1
field2 : val2
}
}
tree_type:
{
branch:
[
{
field1 :val1
field2 : val2
}
{
field1 :val1
field2 : val2
}
{
field1 :val1
field2 : val2
}
]
}
}
],
您必须检索并检查 "branch" 对象的类型。
试试这个:
List<Branch> branches = new ArrayList<>();
if (jsonObject.has("branch") && jsonObject.get("branch") instanceof JSONObject) {
// it is a JSONObject
JSONObject branch = jsonObject.getJSONObject("branch");
// parse your branch : Branch branchObject = ...
branches.add(branchObject);
} else if (jsonObject.has("branch") && jsonObject.get("branch") instanceof JSONArray) {
// it is an JSONArray
JSONArray branchArray = jsonObject.getJSONArray("branch");
// loop branches
for (int i = 0; i < branchArray.length(); i++)
{
if (branchArray.get(i) instanceof JSONObject) {
JSONObject branch = branchArray.getJSONObject(i);
// parse your branch : Branch branchObject = ...
branches.add(branchObject);
}
}
}