java - 无法使用gson和retrofit从对象读取数据

标签 java android arrays object gson

服务器当前返回一个类似于下面给出的 json 的 json,它包含一个名为 data 的字段,它是一个数组数组,每个数组都有多个对象,每个对象都有一个名为 item_type。关键的 item_type 允许我准确地弄清楚它是什么类型的对象,以便我可以在 java 中相应地转换它,但我无法读取 item_type 字段。 p>

{  
   "page":1,
   "data":[  
      [  
         {  
            "id":1,
            "name":"xyz",
            "item_type":1
         }
      ],
      [  
         {  
            "cid":1,
            "item_type":2
         }
      ],
      [  
         {  
            "item":1,
            "item_type":3
         }
      ]
   ]
}

改造后的界面是这样的

    @GET("Search")
        Observable<SearchResults> search(@Query(ParamsHolder.GET_QUERY) 
    String query, @Query(ParamsHolder.GET_PAGE) int page);

其中 SearchResults 类如下所示

public class SearchResults {

    int page;

    List<List<Object>> data;

    public int getPage() {
        return page;
    }

    public List<List<Object>> getData() {
        return data;
    }
}

我能够很好地获取数据,但我需要读取每个列表中的对象。为此,我使用了以下代码


public class SearchItem {

  int item_type;

  public int getItemType() {
      return item_type;
  }
}

List<List<Object>> data = objects.getData();

for (int i = 0; i < data.size(); i++) {

  List<Object> list = data.get(i);

  for (int j = 0; j < list.size(); j++) {

    SearchItem item = (SearchItem) list.get(i);

    Log.d("search", " json=" + list.get(j).toString());
    Log.d("search", " item=" + item.toString() + " type=" + item.getItemType());
    }

}

我创建了一个虚拟的 SearchItem 类,我认为它可以让我对 Object 类型进行类型转换,这样我就可以读取 item_type ,这将让我确切地知道这是什么对象的类型。

它抛出错误com.google.gson.internal.LinkedTreeMap无法转换为in.example.models.SearchItem

这里的最终目标是能够将数组中的每个对象转换为正确的类型,而我能做到这一点的唯一方法是读取对象中的 item_type

最佳答案

使用Gson直接解析响应

更新搜索结果

 public class SearchResults {

    int page;

    List<List<SearchItem>> data;

    public int getPage() {
        return page;
    }

    public List<List<SearchItem>> getData() {
        return data;
    }
}

您可以像这样访问 item_type

searchResult.getData.get(i).get(0).item_type

关于java - 无法使用gson和retrofit从对象读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633760/

相关文章:

java - Spring 在运行时更改属性文件

java - 从另一个 Java 类访问数据

android - 接近信标 API : Android and Nearby

javascript - 如何用特定值替换数组并添加到特定索引中?

arrays - 如何将 int 数组转换为字符串数组

java - JDBC COUNT()某一行如何得到结果

C# 等效于 Java 的 mkdirs()

Android:控制外部显示器(例如投影仪)

android - AVD(Android 虚拟设备)是否写入日志?如果是哪里?

c - c中带有数组的结构的结果不一致