Reputation: 3851
As the title says, I am trying to get jsonPath to not throw exceptions. I also only want to read the json one time and then pull stuff out. Below is my code. What am I doing wrong?
List<Map<String, Object>> messageList = new ArrayList<>();
for (String message : messages) {
Map<String, Object> theData = new LinkedHashMap<>();
Object document = Configuration
.defaultConfiguration()
.addOptions(Option.SUPPRESS_EXCEPTIONS)
.jsonProvider().parse(message);
theData.put("Pk", JsonPath.read(document, "$.header.equipAssetGuid"));
theData.put("assetLocalDate", JsonPath.read(document, "$.header.assetLocalDate"));
theData.put("msgTs", JsonPath.read(document, "$.header.messageTiestamp"));
theData.put("utcOffset", JsonPath.read(document, "$.header.utcOffset"));
theData.put("msgId", JsonPath.read(document, "$.header.messageId"));
theData.put("lastUpdtdTs", JsonPath.read(document, "$.header.messageTimestamp"));
Object m = JsonPath.read(document, "$.fuelLevels[0].level");
if (m != null) {
theData.put("measurement", m);
}
messageList.add(theData);
}
It always throws an exception if I fuss up the path.
Upvotes: 1
Views: 2209
Reputation: 3851
Came up with this:
List<Map<String, Object>> messageList = new ArrayList<>();
for (String message : messages) {
Map<String, Object> theData = new LinkedHashMap<>();
Configuration conf = Configuration.defaultConfiguration()
.setOptions(Option.SUPPRESS_EXCEPTIONS);
DocumentContext documentContext = JsonPath.using(conf).parse(message);
theData.put("Pk", documentContext.read("$.header.equipAssetGuid"));
theData.put("assetLocalDate", documentContext.read("$.header.assetLocalDate"));
theData.put("msgTs", documentContext.read("$.header.messageTimestamp"));
theData.put("utcOffset", documentContext.read("$.header.utcOffset"));
theData.put("msgId", documentContext.read("$.header.messageId"));
theData.put("lastUpdtdTs", documentContext.read("$.header.messageTimestamp"));
Object m = documentContext.read("$.fuelLevels[0].level");
if (m != null) {
theData.put("measurement", m);
}
messageList.add(theData);
}
Upvotes: 2