繁体   English   中英

如何将json解析为object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM