【问题标题】:Convert List<MyDTO> to List<Map<String,String>> using Gson使用 Gson 将 List<MyDTO> 转换为 List<Map<String,String>>
【发布时间】:2017-06-08 08:04:50
【问题描述】:

我的 DTO 如下:

     public class MyDTO {
           private String MEValueName;
           private String MyId;

          // getters and setters

     }

     Gson gson = new Gson();
     List<MyDTO> list = new ArrayList<MyDTO>();
     MyDTO dto = new MyDTO();

     dto.setMEValueName("raghu");
     dto.setMyId("qwer");

     MyDTO dto1 = new MyDTO();

     dto1.setMEValueName("raghuveer");
     dto1.setMyId("qwer1");

     list.add(dto);
     list.add(dto1);

     String json = gson.toJson(list);
     System.out.println(json);

     // below line is failing
     List<Map<String, String>> list1 = gson.fromJson(json, new TypeToken<List<Map<String, String>>>(){}.getType()); 
     System.out.println(list1);

当我运行它时,我得到以下错误:

java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 11 path $[0].

我还想使用泛型类型,以便我可以使用其他 DTO 也转换为地图列表。请建议。

【问题讨论】:

  • 我错过了什么问题有什么问题?
  • 这只是一个普通的 POJO
  • 能否提供 MyDTO 的代码?
  • 地图内容是什么?
  • 你的代码很适合我。结果是[{"MEValueName":"raghu","MyId":"qwer"},{"MEValueName":"raghuveer","MyId":"qwer1"}] [{MEValueName=raghu, MyId=qwer}, {MEValueName=raghuveer, MyId=qwer1}]

标签: java gson


【解决方案1】:

我看到两个直接的问题... json 字符串是 List 类型的对象。 gson.fromJson 必须具有相同对象类型的 TypeToken。 即使 fromJson 有效,您也不能将 List 分配给 List> 类型的列表。

编辑(通过记忆执行此操作,因此可能需要一些微调才能编译):

List<Map<String, String>> list1 = new List();
Map<String,String> map = new HashMap<>();
list1.add(map);
map.add("some key",json);

【讨论】:

  • 这是否意味着Gson 无法解决我的问题?我错过了什么吗?
  • Gson 只是通过 json 字符串来回转换对象。
  • 取决于您需要地图做什么?是,要不要把DTO在map中表示为json字符串?
  • 是的,列出 到列表>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 2021-12-21
  • 2016-07-21
相关资源
最近更新 更多