public int extractInteger(JsonObject json, String name, int defaultValue) { if (json != null) { int dotIndex = name.indexOf('.'); if (dotIndex > 0) { String baseName = name.substring(0, dotIndex); JsonElement childElement = json.get(baseName); return extractInteger((JsonObject) childElement, name.substring(dotIndex + 1), defaultValue); } JsonElement element = json.get(name); if (element != null && ! element.isJsonNull()) { return element.getAsInt(); } } return defaultValue; }
public long extractTimestamp(JsonObject json, String name) { String timestamp = extractString(json, name); if (timestamp != null) { try { Instant instant = Instant.parse(timestamp); return instant.toEpochMilli(); } catch (Exception ex) { logger.info("Invalid timestamp: {}", timestamp); } } return 0; }
@Test public void extractFieldsTest() { String event = "{\"meta\":{\"name\":\"OneVehicleDynamicData\",\"timestamp\":" + "\"2017-02-14T10:20:37.629Z\",\"grouping\":\"OneVehicleFinderData\"," + "\"distribution_key\":\"665292e8-6a3b-4702-9666-b5624d6c8320\"},\"position\":{" + "\"latitude\":48.042999267578125,\"longitude\":11.510173797607422,\"foo\":7}," + "\"vehicle_id\":\"abcd\",\"fuel_level\":999," + "\"charge_level\":50.0,\"odometer\":12345}"; JsonObject json = (JsonObject) new JsonParser().parse(event); assertThat(jsonUtil.extractInteger(json, "odometer", -1)).isEqualTo(12345); assertThat(jsonUtil.extractDouble(json, "charge_level", -1)) .isCloseTo(50, Percentage.withPercentage(1)); assertThat(jsonUtil.extractString(json, "vehicle_id")).isEqualTo("abcd"); //check dot-notation paths assertThat(jsonUtil.extractInteger(json, "position.foo", -1)).isEqualTo(7); assertThat(jsonUtil.extractDouble(json, "position.latitude", 0)) .isCloseTo(48.043, Percentage.withPercentage(1)); assertThat(jsonUtil.extractString(json, "meta.name")).isEqualTo("OneVehicleDynamicData"); }
public double extractDouble(JsonObject json, String name, int defaultValue) { if (json != null) { int dotIndex = name.indexOf('.'); if (dotIndex > 0) { String baseName = name.substring(0, dotIndex); JsonElement childElement = json.get(baseName); return extractDouble((JsonObject) childElement, name.substring(dotIndex + 1), defaultValue); } JsonElement element = json.get(name); if (element != null && ! element.isJsonNull()) { return element.getAsDouble(); } } return defaultValue; }
public String extractString(JsonObject json, String name) { if (json != null) { int dotIndex = name.indexOf('.'); if (dotIndex > 0) { String baseName = name.substring(0, dotIndex); JsonElement childElement = json.get(baseName); return extractString((JsonObject) childElement, name.substring(dotIndex + 1)); } JsonElement element = json.get(name); if (element != null && ! element.isJsonNull()) { return element.getAsString(); } } return null; }