【问题标题】:Retrofit parse dynamic JSON response key (Android)改造解析动态 JSON 响应密钥 (Android)
【发布时间】:2015-07-21 14:51:40
【问题描述】:

我有一个下面给出的 JSON 结构。如您所见,branch 键可以是数组或对象。我该怎么处理这个?基本上,如果 branch 的实例超过 1 个,它就会变成一个数组,否则它会继续显示一个对象。我该如何处理。它在运行时给了我一个转换错误,因为我的 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

    } 
   ]

 }
}
],

【问题讨论】:

  • 让我知道你的代码..

标签: android retrofit


【解决方案1】:

您必须检索并检查“分支”对象的类型。

试试这个:

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

【讨论】:

  • 所以,这段代码必须在我的转换器类中使用,对吧?
  • 我不知道你的转换器类。但是,如果您有 Branch 类,您需要以某种方式解析并填写 JSON 中的值。我会这样做。
  • 而不是 jsonObject,我有一个 json 数组,来自我上面的例子,它的 tree_type: 。所以 '.has()' 方法对它不起作用。但是,我的主要对象是 mainObject = new JSONObject(myjsonstring);未检测到“分支”键。但是它确实检测到 'tree_type: ' 数组
  • 所以你可以从你的 mainObject 中获取 treet_type 数组并循环遍历它: for (int i = 0; i
  • 除了改造还有什么可以自动处理的吗?比如凌空等
猜你喜欢
  • 1970-01-01
  • 2016-03-10
  • 2015-08-18
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 2021-09-06
相关资源
最近更新 更多