Java 使用jackson反序列化包含@JsonFormat(shape=JsonFormat.shape.ARRAY)和自定义对象的json
我有一个自定义对象:Java 使用jackson反序列化包含@JsonFormat(shape=JsonFormat.shape.ARRAY)和自定义对象的json,java,json,jackson,Java,Json,Jackson,我有一个自定义对象: public class Response { @JsonProperty("values") private List<Value> values; @JsonFormat(shape=JsonFormat.Shape.ARRAY) public static class Value { public Value(long timestamp, float val) {
public class Response
{
@JsonProperty("values")
private List<Value> values;
@JsonFormat(shape=JsonFormat.Shape.ARRAY)
public static class Value {
public Value(long timestamp, float val)
{
this.timestamp = timestamp;
this.val = val;
}
}
}
知道我是不是遗漏了什么吗?或者我应该有一个自定义的反序列化程序来执行此操作吗?您应该
JsonFormat
覆盖变量值。另外,由于变量的类型为List
,因此不需要添加JsonFormat
public class Response
{
@JsonProperty("values")
@JsonFormat(shape=JsonFormat.Shape.ARRAY)
private List<Value> values;
public static class Value {
private long timestamp;
private float val;
// Getters and Setters
public Value(long timestamp, float val)
{
this.timestamp = timestamp;
this.val = val;
}
}
}
希望这有帮助!!我还没有测试代码,所以如果有语法问题,请忽略。JsonFormat
会起作用,但您还需要使用JsonCreator
注释声明构造函数。请看下面的示例:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.util.List;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
Response myPojo = mapper.readValue(jsonFile, Response.class);
System.out.println(myPojo);
}
}
class Response {
private List<Value> values;
public List<Value> getValues() {
return values;
}
public void setValues(List<Value> values) {
this.values = values;
}
@Override
public String toString() {
return "Response{" +
"values=" + values +
'}';
}
}
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
class Value {
private long timestamp;
private float val;
@JsonCreator
public Value(@JsonProperty("timestamp") long timestamp, @JsonProperty("val") float val) {
this.timestamp = timestamp;
this.val = val;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public float getVal() {
return val;
}
public void setVal(float val) {
this.val = val;
}
@Override
public String toString() {
return "Value{" +
"timestamp=" + timestamp +
", val=" + val +
'}';
}
}
印刷品:
Response{values=[Value{timestamp=1552215648, val=18.0}, Value{timestamp=123, val=12.24}]}
啊,变量值上的JsonFormat也没有帮助。:/变量是列表的列表,对吗?所以对于内部列表,我需要JsonFormat。不,输入格式会有所不同。我会在回答中加上这一点是的,不幸的是我没有';我无法控制反应。它是一个长的和浮动的数组。不是地图。阵列将类似于[[157382008,45.5]],谢谢Michal。这似乎奏效了。另外,我使用的是jackson.map的objectmapper,而不是jackson.databind。这也是一个不必要的错误。
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.util.List;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
Response myPojo = mapper.readValue(jsonFile, Response.class);
System.out.println(myPojo);
}
}
class Response {
private List<Value> values;
public List<Value> getValues() {
return values;
}
public void setValues(List<Value> values) {
this.values = values;
}
@Override
public String toString() {
return "Response{" +
"values=" + values +
'}';
}
}
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
class Value {
private long timestamp;
private float val;
@JsonCreator
public Value(@JsonProperty("timestamp") long timestamp, @JsonProperty("val") float val) {
this.timestamp = timestamp;
this.val = val;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public float getVal() {
return val;
}
public void setVal(float val) {
this.val = val;
}
@Override
public String toString() {
return "Value{" +
"timestamp=" + timestamp +
", val=" + val +
'}';
}
}
{
"values": [
[
1552215648,
18
],
[
123,
12.24
]
]
}
Response{values=[Value{timestamp=1552215648, val=18.0}, Value{timestamp=123, val=12.24}]}