您需要创建POJO,然后使用Jackson ObjectMapper API将JSON字符串读取到Java对象中。
以下是基于您提供的示例字符串的工作代码。
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({ "info", "data" })
public class Process {
@JsonProperty("info")
private String info;
@JsonProperty("data")
private Data data;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonProperty("info")
public String getInfo() {
return info;
}
@JsonProperty("info")
public void setInfo(String info) {
this.info = info;
}
@JsonProperty("data")
public Data getData() {
return data;
}
@JsonProperty("data")
public void setData(Data data) {
this.data = data;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({ "id", "cars" })
public class Data {
@JsonProperty("id")
private String id;
@JsonProperty("cars")
private List<Car> cars = null;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonProperty("id")
public String getId() {
return id;
}
@JsonProperty("id")
public void setId(String id) {
this.id = id;
}
@JsonProperty("cars")
public List<Car> getCars() {
return cars;
}
@JsonProperty("cars")
public void setCars(List<Car> cars) {
this.cars = cars;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({ "id" })
public class Car {
@JsonProperty("id")
private String id;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonProperty("id")
public String getId() {
return id;
}
@JsonProperty("id")
public void setId(String id) {
this.id = id;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
将JSON字符串反序列化的代码。
import java.io.IOException;
import java.util.List;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class MainApp {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
String input = "{\r\n" +
" \"info\": \"processing\",\r\n" +
" \"data\": {\r\n" +
" \"id\": \"123\",\r\n" +
" \"cars\": [\r\n" +
" {\r\n" +
" \"id\": \"1\"\r\n" +
" },\r\n" +
" {\r\n" +
" \"id\": \"2\"\r\n" +
" }\r\n" +
" ]\r\n" +
" }\r\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
Process process = mapper.readValue(input, Process.class);
System.out.println(process.getInfo());
Data data = process.getData();
List<Car> cars = data.getCars();
for(Car car : cars) {
System.out.println(car.getId());
}
}
}
希望这能帮到你。
@JsonRootName(value = "data")
有关,因为在你的JSON中,“data”元素不是根元素,而是具有兄弟元素:“info”。顺便问一下,您正在使用哪个JSON映射库? - STaefi