gpt4 book ai didi

java - 使用 jackson 反序列化包含 @JsonFormat(shape=JsonFormat.Shape.ARRAY) 和自定义对象的 json

转载 作者:行者123 更新时间:2023-11-30 05:44:31 25 4
gpt4 key购买 nike

我有一个自定义对象:

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;
}
}
}

但是当解析它时,我得到“无法从 START_ARRAY token 中反序列化 Response$Value 的实例”。json 是:

{
"values":[[1552215648,18]]
}

知道我是否在这里遗漏了什么吗?或者我应该有一个自定义解串器来执行此操作?

最佳答案

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 +
'}';
}
}

以上代码用于以下 JSON 有效负载:

{
"values": [
[
1552215648,
18
],
[
123,
12.24
]
]
}

打印:

Response{values=[Value{timestamp=1552215648, val=18.0}, Value{timestamp=123, val=12.24}]}

关于java - 使用 jackson 反序列化包含 @JsonFormat(shape=JsonFormat.Shape.ARRAY) 和自定义对象的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55086995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com