使用jsonschema2pojo生成POJO后,如何获取List内的distance.inMeters属性比较?
解决List嵌套结构中获取
inMeters属性的问题 嘿,我完全懂你现在的困扰——用jsonschema2pojo生成的POJO里,distance的inMeters藏在多层List嵌套里,没法直接通过对象点属性拿到对吧?别慌,咱们一步步拆解这个问题。
首先,先明确你生成的POJO结构应该和你的JSON层级对应。根据你提供的JSON示例,生成的类大概会是这样的(类名可能略有不同,但核心层级一致):
public class DistanceResponse { private List<String> originAddresses; private List<String> destinationAddresses; private List<Row> rows; // 自动生成的getter、setter、toString等方法 public static class Row { private List<Element> elements; // getter、setter } public static class Element { private Distance distance; // getter、setter } public static class Distance { private long inMeters; private String text; // getter、setter } }
简单说,层级关系是:DistanceResponse → rows(List)→ elements(List)→ distance → inMeters。接下来分两种场景解决:
场景1:遍历所有inMeters进行比较
如果需要对所有目的地的距离都做数值比较,直接嵌套遍历List就行:
// 假设你已经把JSON解析成了DistanceResponse对象 DistanceResponse response = yourJsonParsingMethod(jsonContent); // 遍历每一行(通常origin到多个destination会对应一行) for (DistanceResponse.Row row : response.getRows()) { // 遍历该行下的每个目的地距离元素 for (DistanceResponse.Element element : row.getElements()) { long currentDistance = element.getDistance().getInMeters(); // 这里就可以做数值比较了 if (currentDistance < 500) { System.out.println("这个目的地离起点不到500米"); } } }
场景2:获取特定位置的inMeters
如果你只需要某个特定目的地的距离(比如第一个),可以直接通过List索引获取,但要注意先判断List是否为空,避免空指针异常:
DistanceResponse response = yourJsonParsingMethod(jsonContent); // 先判断rows和elements是否非空 if (!response.getRows().isEmpty()) { DistanceResponse.Row firstRow = response.getRows().get(0); if (!firstRow.getElements().isEmpty()) { long firstDestinationDistance = firstRow.getElements().get(0).getDistance().getInMeters(); // 进行你需要的数值比较,比如: if (firstDestinationDistance > 1000) { System.out.println("第一个目的地离起点超过1公里"); } } }
小提示
如果你的POJO里的属性名和我上面写的不一样(比如可能叫results而不是rows),别担心——jsonschema2pojo生成的属性名是和JSON字段对应的,你可以看生成类里的getter方法(比如getResults()),或者直接查看POJO类的源码确认层级结构。
内容的提问来源于stack exchange,提问作者Nomore
相关产品推荐
相关产品推荐

