JSON字段 - 将字符串解析为整数

4

我有一个实体对象,其中Id字段的类型是整数。但是,要映射的传入Json数据将id作为字符串。

由于这个问题,直接进行映射似乎不太容易。是否有一种方法可以在映射之前将JSON中的字符串数据更改为整数?

示例Json数据:

{"Id": "021", "userAge": 99}

示例实体

@Entity
public class User{

    @id
    int userId;
    int userAge;
}

很多感谢。
2个回答

8

不需要。

Jackson 足够智能,如果目标字段是数字类型,就可以将 JSON 字符串转换为数字值。

不清楚前导的 0 代表什么,但 Jackson 将简单地忽略它。

此外,如果你在 Java 中的字段名与 JSON 名称不同,你需要使用 @JsonProperty("theJsonName") 注解。

public class Jackson {
    public static void main(String[] args) throws Exception {
        String json = "{\"userId\": \"021\", \"userAge\": 99}";
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);
        System.out.println(user.userId);
    }
}

class User {
    int userId;
    int userAge;
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }
}

打印
21

1
你可以编写一个自定义的Jackson反序列化器来处理这种行为。关于这个主题,这里有一篇很好的博客文章在这里
public class ItemDeserializer extends JsonDeserializer<Item> {

    @Override
    public Item deserialize(JsonParser jp, DeserializationContext ctxt) 
      throws IOException, JsonProcessingException {
        JsonNode node = jp.getCodec().readTree(jp);
        int id = Integer.parseInt(node.get("userId").asText());
        int userAge = (Integer) ((IntNode) node.get("userAge")).numberValue();

        return new Item(id, userAge);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接