当前位置: 首页 > 面试题库 >

如何使用杰克逊解析可能是字符串并且可能是数组的字段

景唯
2023-03-14
问题内容

我是java和objectMapper的新手。我正在尝试解析json字段,该字段可能是键具有两种类型,它可以是字符串或数组。

例子:

{
  "addresses": [],
  "full_name": [
    "test name_1",
    "test name_2"
  ],
}

要么

{
{
  "addresses": [],
  "full_name": "test name_3",
}
}

类的例子:

@JsonIgnoreProperties(ignoreUnknown = true)
@Data -> lombok.Data
public class Document {

    private List<String> addresses;

    @JsonProperty("full_name")
    private String fullName;
}

我使用objectMapper来反序列化json,当“ full_name”字段具有字符串但到达数组时无法反序列化时,它可以正常工作。

这个想法是,当到达属性时将字符串放入值,但到达数组时,将de数组元素串联为字符串(String.join(“,”,value))

可以在类方法中应用自定义反序列化吗?例如setFullName()(使用lombok.Data)

我在该站点上看到了其他示例,但没有用。

谢谢大家


问题答案:

从jackson
2.6开始,您可以使用JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY

@JsonProperty("full_name")
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
private String[] fullName;


 类似资料:
  • 我是java和objectMapper的新手。我正在尝试解析json字段,该字段可能具有两种类型,它可能是字符串或数组。 例如: 或 类示例: 我使用objectMapper来反序列化json,当“full_name”字段有一个字符串时可以正常工作,但是当数组到达时,数组无法反序列化。 这个想法是,当到达一个字符串时,将值放在属性中,但当到达数组时,将数组元素连接为字符串(String.join

  • 问题内容: 它应该是如此简单,但是在尝试一个小时的尴尬之后,我只是找不到它。 我需要获取一个JSON字符串,例如,解析为。 给 问题答案: 理查兹的答案略有不同,但可以使用字符串,因此可以将其简化为:

  • 问题内容: 我有一个下面的JSON,我需要从中制作一个。在下面的JSON中,我只有3个级别,但通常可以更高,有时也可以更低。 我图的关键是它的部分和值应是最后。 现在我可以嵌套在其中,因此在为此创建POJO时遇到问题。我可以有一个级别,也可以嵌套在每个级别中,而我总是需要获取最后一个的ID 。 因此,我通过转到jsonschema2pojo来为此创建一个POJO,并提供了JSON,它在其中生成了我

  • 问题内容: 我在解组一些我无法控制的Json时遇到麻烦。在一个字段中,有99%的时间是字符串,但偶尔是数组。 杰森如下: 错误:json:无法将数组解组为字符串类型的Go结构字段MyListItem.display_name 问题答案: 使用json.RawMessage捕获变化的字段。 使用json“-”名称对解码器隐藏字段。顶级JSON解码后,应用程序将填充此字段。 解组顶级JSON: 根据原

  • 发生了严重的错误。 我有 我需要准备要传递给Spring jdbcTemplate的对象数组。然而,由于某些原因,ArrayList中的元素被视为字符串,因此在执行jdbcTemplate时会中断,抱怨它无法从字符串转换为int。然后我尝试在循环中转换,看看这是否有帮助:-\显然,我不能做Integer。parseInt作为IDE正确地将其视为整数。每当我将整数a=Activities分配给Del

  • 我写了一段代码,其中我扫描了一个整数,假设是121,为了把它分成3个部分,我把它变成一个字符串,并尝试通过拆分再次转换它?有什么简单的方法可以让它变成这样吗?