【问题标题】:serialize and deserialize without map name没有地图名称的序列化和反序列化
【发布时间】:2018-11-05 16:44:06
【问题描述】:

我有以下对象:

public class Class_a{
   private List<class_b> someList;
 }

public class Class_b{
   private Map<String,String> someMap;
 }

我的 json 将如下所示:

"someList":[{"someMap":{"strKey1":"strValue1"}},{"someMap":{"strKey2":"strValue2"}}] 

是否可以在不更改我的对象的情况下序列化一个看起来像这样的 Json(并且我可以选择反序列化对象):

"someList":[{"strKey1":"strValue1"},{"strKey2":"strValue2"}]

*我知道如果会这样定义我的对象:

 public class Class_a{
   private List<Map<Strung,String>> someList;
 }

我会得到我想要的 Json - 但我正在尝试找到比包含“地图”的“列表”更优雅的解决方案

我的项目使用 spring 框架和 Jackson。

【问题讨论】:

标签: java json


【解决方案1】:

这对我有用,我只需要在你的类中添加 getter 和 setter,我就可以用 jackson 解析:

 @Test
    public void t() throws IOException {
        String json = "{\"someList\":[{\"someMap\":{\"strKey1\":\"strValue1\"}},{\"someMap\":{\"strKey2\":\"strValue2\"}}]}";
        Class_a a = new ObjectMapper().readValue(json, Class_a.class);

        System.out.println(a);

    }


@Getter
@Setter
public class Class_a{
   private List<Class_b> someList;
 }


@Getter
@Setter
public class Class_b{
    private Map<String,String> someMap;
}

我正在使用 lombok,但这没什么特别的,您也可以手动创建 getter/setter 并且可以正常工作

【讨论】:

  • 是否适用于以下情况: String json = "{\"someList\":[{\"strKey1\":\"strValue1\"},{\"strKey2\":\"strValue2 \"}]}"?
  • 到目前为止还不行,我试过 Unwrap 但似乎不明白,也许它需要自定义反序列化器。我会再试一次,如果有什么工作会更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 2023-03-11
  • 2017-11-29
  • 2013-10-09
  • 2020-01-14
相关资源
最近更新 更多