Jayway JsonPath 读长 Java
Jayway JsonPath read long Java
在 JSON 我收到一个 unix 时间戳:
{
"order": {
"date": 1531380888
}
}
我想将这个值读入 long
,这样我就可以从中创建一个 Date 对象:
Configuration conf = Configuration.builder().mappingProvider(new JacksonMappingProvider())
.jsonProvider(new JacksonJsonProvider()).build();
Object rawJson = conf.jsonProvider().parse(payload);
Long orderDate = JsonPath.read(rawJson, "$.order.date");
但是 JSONPath 坚持认为这个 Integer 不能转换为 long:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
有没有办法用 Jsonpath 读取 Long,或者自动将这个 unix 时间戳转换为 Java 日期对象?
进口:
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.spi.json.JacksonJsonProvider;
import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider;
整数问题:最大值为 2147483647
,即 Tuesday, January 19, 2038 3:14:07 AM GMT
。不能将整数用作 unix 时间戳。
谢谢。
您可以将 JsonPath 使用的 ObjectMapper
配置为将整数视为长整型。这将确保所有整数值(和长值)都作为长整数返回。
这是一个例子:
String payload = "{\"order\": { \"date\": 1531380888 } }";
ObjectMapper objectMapper = new ObjectMapper().configure(DeserializationFeature.USE_LONG_FOR_INTS, true);
Configuration conf = Configuration.builder()
.jsonProvider(new JacksonJsonProvider(objectMapper))
.build();
Object rawJson = conf.jsonProvider().parse(payload);
Long orderDate = JsonPath.read(rawJson, "$.order.date");
assertThat(orderDate, is(1531380888L));
在 JSON 我收到一个 unix 时间戳:
{
"order": {
"date": 1531380888
}
}
我想将这个值读入 long
,这样我就可以从中创建一个 Date 对象:
Configuration conf = Configuration.builder().mappingProvider(new JacksonMappingProvider())
.jsonProvider(new JacksonJsonProvider()).build();
Object rawJson = conf.jsonProvider().parse(payload);
Long orderDate = JsonPath.read(rawJson, "$.order.date");
但是 JSONPath 坚持认为这个 Integer 不能转换为 long:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
有没有办法用 Jsonpath 读取 Long,或者自动将这个 unix 时间戳转换为 Java 日期对象?
进口:
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.spi.json.JacksonJsonProvider;
import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider;
整数问题:最大值为 2147483647
,即 Tuesday, January 19, 2038 3:14:07 AM GMT
。不能将整数用作 unix 时间戳。
谢谢。
您可以将 JsonPath 使用的 ObjectMapper
配置为将整数视为长整型。这将确保所有整数值(和长值)都作为长整数返回。
这是一个例子:
String payload = "{\"order\": { \"date\": 1531380888 } }";
ObjectMapper objectMapper = new ObjectMapper().configure(DeserializationFeature.USE_LONG_FOR_INTS, true);
Configuration conf = Configuration.builder()
.jsonProvider(new JacksonJsonProvider(objectMapper))
.build();
Object rawJson = conf.jsonProvider().parse(payload);
Long orderDate = JsonPath.read(rawJson, "$.order.date");
assertThat(orderDate, is(1531380888L));