Jackson将字符串列表反序列化为字符串

2eety:

有没有一种简单的方法可以将字符串列表反序列化为单个字符串?

例如,我将使用以下JSON:

{
    "stringList": [
        "somethingElse"
    ],
    "simpleString": "something",
}

我希望将其反序列化为此POJO:

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AClass {

    @JsonProperty("stringList")
    private String justAString;

    @JsonProperty("simpleString")
    private String someString;
}

我想提一下,可以肯定的是,该列表只有一项,并且无法控制其生成方式。是为justAString字段添加自定义反序列化器的唯一方法吗?

编辑如果可能的话,我想使用Jackson的ObjectMapper

安德烈亚斯(Andreas):

一种方法是对需要转换的属性使用备用的getter / setter方法,即,将@JsonProperty注释从字段移到getter方法,添加额外的一组getter / setter方法,并使用@JsonIgnore以便ObjectMapper不使用它们:

class AClass {

    private String justAString;
    private String someString;

    @JsonProperty // JSON field named same as virtual property
    private List<String> getStringList() { // Getter for virtual property (private = hidden from Java callers)
        return Collections.singletonList(this.justAString);
    }

    private void setStringList(List<String> stringList) { // Setter for virtual property
        this.justAString = stringList.toString();
    }

    @JsonIgnore // This POJO property is not a JSON field
    public String getJustAString() { // Standard POJO getter
        return this.justAString;
    }

    public void setJustAString(String justAString) { // Standard POJO setter
        this.justAString = justAString;
    }

    @JsonProperty("simpleString") // JSON field named different from POJO property
    public String getSomeString() { // Standard POJO getter
        return this.someString;
    }

    public void setSomeString(String someString) { // Standard POJO setter
        this.someString = someString;
    }

}

测试

String input = "{\r\n" + 
               "    \"stringList\": [\r\n" + 
               "        \"somethingElse\"\r\n" + 
               "    ],\r\n" + 
               "    \"simpleString\": \"something\"\r\n" + 
               "}";
AClass aClass = new ObjectMapper().readValue(input, AClass.class);
System.out.println("justAString = " + aClass.getJustAString());
System.out.println("someString = " + aClass.getSomeString());

输出量

justAString = [somethingElse]
someString = something

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Jackson:将空字符串反序列化为空字符串

将字符串反序列化为双倍

将字符串反序列化为Google TokenResponse

将字符串数组反序列化为csv

将请求字符串反序列化为数组

将XML字符串反序列化为类

将Mongodb字符串反序列化为对象

将JSON字符串反序列化为Class

Jackson:将字符串数组反序列化为List <T>

使用Jackson将JSON字符串或对象反序列化为String字段

将json字符串反序列化为通用类型的列表

无法将 Json 文件反序列化为带有字符串“key”的 KeyValuePair 列表

Newtonsoft Json将具有布尔属性的动态列表反序列化为字符串

将json字符串反序列化为.NET对象列表

将JSON字符串或字符串数组反序列化为Vec

将通用对象序列化/反序列化为字符串

Jackson 2-使用Android上的Retrofit REST-API直接将字符串反序列化为日期

无法反序列化为字符串

将列表<KeyValuePair <字符串,字符串>>序列化为JSON

C# JSON 将文件反序列化为对象列表失败,将字符串转换为集合错误

将具有特殊字符的JSON反序列化为字符串

GSON:JSON反序列化为变量类型(列表/字符串)

如何将逗号分隔的JSON字符串反序列化为单独字符串的向量?

避免gson将json字符串反序列化为LinkedHashMap类成员

杰克逊,将字符串反序列化为日期

将JSON字符串反序列化为Java Object

扩展 XamlCompiler 以将字符串反序列化为集合

无法将字符串反序列化为Java对象

将XML字符串从Web服务API反序列化为C#对象