[英]How to parse json to object
我想用一个字段创建一个 object:List
public class Responce {
List<String> cities
// some methods
}
JSON 本身看起来像这样(它在对象中有一个 object):
{"responce" : {
"list" : {
"1": "А",
"2": "B",
"3": "C",
.....
}
}
我只想获得 A、B、C 的列表,所有这些都不需要创建大量的类:)
我试过 JsonNons 和@JsonPropery,但到目前为止运气不好。
我没有得到你的问题,但如果你需要反序列化 json 数据,那么你可以试试这个。
为 List 创建一个 pojo class
public class cityListPojo{
private List<String> cityList;
public List<String> getCityList() {
return cityList;
}
public void setCityList(List<String> cityList) {
this.cityList = cityList;
}
}
然后使用 jackson 库,您可以将收到的 json 字符串转换为 cityListPojo class Object 作为
// jsonString:- 从 db 或任何地方获取 json 并将其转换为字符串。
cityListPojo obj = new ObjectMapper().readValue(jsonString, cityListPojo.class);
然后使用 obj object 将列表取回为。
List<String> cityList = obj.getCityList();
// 使用这些 jackson 依赖项仅供参考。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
设置如下城市,
响应.java
public class Response {
@JsonProperty
private Map<String, String> list;
@JsonIgnore
List<String> cities = new ArrayList<>();
public Map<String, String> getList() {
return list;
}
public void setList(Map<String, String> list) {
Set<String> keys = list.keySet();
for (String key : keys) {
cities.add(list.get(key));
}
this.list = list;
}
public List<String> getCities() {
return cities;
}
public void setCities(List<String> cities) {
this.cities = cities;
}
}
测试方法
public static void main(String... args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = " {\r\n" +
" \"list\" : {\r\n" +
" \"1\": \"А\",\r\n" +
" \"2\": \"B\",\r\n" +
" \"3\": \"C\",\r\n" +
" \"4\":\"D\",\r\n" +
" \"5\":\"E\"\r\n" +
" }\r\n" +
" }";
Response response = mapper.readValue(json, Response.class);
System.out.println("Object:" + mapper.writeValueAsString(response));
System.out.println("Cities:");
for (String city : response.getCities()) {
System.out.print("\t" + city);
}
}
或者可以使用自定义序列化程序
响应.java
@JsonSerialize(using = ResponseSerializer.class)
public class Response {
private Map<String, String> list;
List<String> cities = new ArrayList<>();
public Map<String, String> getList() {
return list;
}
public void setList(Map<String, String> list) {
this.list = list;
}
public List<String> getCities() {
return cities;
}
public void setCities(List<String> cities) {
this.cities = cities;
}
}
ResponseSerializer.java
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
public class ResponseSerializer extends StdSerializer<Response> {
public ResponseSerializer() {
this(null);
}
public ResponseSerializer(Class<Response> t) {
super(t);
}
@Override
public void serialize(Response value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
Map<String, String> list = value.getList();
List<String> cities = new ArrayList<>();
Set<String> keys = list.keySet();
for (String key : keys) {
cities.add(list.get(key));
}
jgen.writeObjectField("cities", cities);
jgen.writeEndObject();
}
}
测试方法
public static void main(String... args) throws Exception {
ObjectMapper mapper1 = new ObjectMapper();
Response response1=new Response() ;
Map<String, String> map=new HashMap<>();
map.put("1", "A");
map.put("2", "B");
map.put("3", "C");
response1.setList(map);
System.out.println("Object:" + mapper1.writeValueAsString(response1));
System.out.println("Cities:");
for (String city : response1.getCities()) {
System.out.print("\t" + city);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.