JSON 字段 - 将字符串解析为 Int
JSON field - Parse String to Int
有一个相对简单的(我认为)问题,但作为 JSON 的新手似乎无法找到一个巧妙的解决方案。
我有一个 Entity 对象,其 Id 字段为 Integer 类型。但是,要映射的传入 Json 数据具有字符串形式的 id。
有了这个简单的地图似乎是不可能的。有没有办法在映射之前将 JSON 中的字符串数据更改为整数?
示例Json数据
{"Id": "021", "userAge": 99}
示例实体
@Entity
public class User{
@id
int userId;
int userAge;
}
非常感谢。
您可以编写自定义 jackson 反序列化器来应对这种行为。关于这个主题 here。
有一篇很好的博客 post
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);
}
}
你不需要。
Jackson 足够聪明,可以将 JSON 字符串转换为数值,如果目标字段是数字的话。
前导 0
的含义并不明显,但 Jackson 会简单地忽略它。
此外,如果您的字段名称在 Java 中不同,您将需要 @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
有一个相对简单的(我认为)问题,但作为 JSON 的新手似乎无法找到一个巧妙的解决方案。
我有一个 Entity 对象,其 Id 字段为 Integer 类型。但是,要映射的传入 Json 数据具有字符串形式的 id。
有了这个简单的地图似乎是不可能的。有没有办法在映射之前将 JSON 中的字符串数据更改为整数?
示例Json数据
{"Id": "021", "userAge": 99}
示例实体
@Entity
public class User{
@id
int userId;
int userAge;
}
非常感谢。
您可以编写自定义 jackson 反序列化器来应对这种行为。关于这个主题 here。
有一篇很好的博客 postpublic 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);
}
}
你不需要。
Jackson 足够聪明,可以将 JSON 字符串转换为数值,如果目标字段是数字的话。
前导 0
的含义并不明显,但 Jackson 会简单地忽略它。
此外,如果您的字段名称在 Java 中不同,您将需要 @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