markthegrea
markthegrea

Reputation: 3851

JsonPath SUPPRESS_EXCEPTIONS does not seem to work

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

Answers (1)

markthegrea
markthegrea

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

Related Questions