改进解析动态JSON响应键(Android)

时间:2015-07-21 06:37:34

标签: android retrofit

我在下面给出了一个JSON结构。如您所见,分支键可以是数组或对象。我该怎么办呢?基本上,如果分支有多个实例,它就会变成一个数组,否则它会继续显示一个单独的对象。我该怎么办呢。它在运行时给出了转换错误,因为我的POJO类包含Branch branch,这是一个对象解除。如果我想处理数组decleration,它将是Branch[] branch。如何使Branch类基于每个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

    } 
   ]

 }
}
],

1 个答案:

答案 0 :(得分:0)

您必须检索并检查"分支的类型"对象

试试这个:

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);
    }
  }
}