如何在Json树中按名称查找节点?

Ksh*_*rma 3 java json jackson

我正在使用Google地理编码API进行逆地理编码。

结果以我按照以下方式解析的Json返回:

Map<String, Object> parsedJson = new ObjectMapper().readValue(
                    response.getEntity(String.class),
                    new TypeReference<Map<String, Object>>() {
                    });
List<Object> results = (List<Object>) parsedJson.get("results");
// From first result get geometry details
Map<String, Object> geometry = (Map<String, Object>) ((Map<String, Object>) results
                    .get(0)).get("geometry");

Map<String, Object> location = (Map<String, Object>) geometry
                    .get("location");

Map<String, Double> coordinates = new HashMap<String, Double>();
coordinates.put("latitude", (Double) location.get("lat"));
coordinates.put("longitude", (Double) location.get("lng"));
Run Code Online (Sandbox Code Playgroud)

其中响应包含从服务器返回的Json。

是否可以直接参考位置节点而不进行所有这些操作?例如,有类似-

new ObjectMapper().readValue(json).findNodeByName("lat").getFloatValue();
Run Code Online (Sandbox Code Playgroud)

我已经阅读了Jackson Api中有关JsonNode和Tree的文档,但似乎仅当您要遍历整个树时,它们才有用。

仅获取特定节点的最简单方法是什么?

Ksh*_*rma 5

+1 Michael Hixson指出了地理编码库。

但是,在浏览了文档之后,我终于找到了解决方案-

ObjectMapper mapper = new ObjectMapper(); 

JsonNode rootNode = mapper.readTree(mapper.getJsonFactory()
                        .createJsonParser(response.getEntity(String.class)));

rootNode.findValue("lat").getDoubleValue();
Run Code Online (Sandbox Code Playgroud)

  • +1用于实际回答原始问题,即使这不是我会采取的方法。:) (2认同)