public JSONObject getAsJSONObject(OntologyManager ontMgr) throws JSONException {
    JSONObject obj = new JSONObject();
    JSONArray arr = new JSONArray();

    // Need to sort
    HashMap<String, Double> sortedMap = Util.sortHashMap(scoreMap);

    for (String label : sortedMap.keySet()) {
      JSONObject oj = new JSONObject();

      // Check if the type contains domain
      if (label.contains("|")) {
        URI domainURI = ontMgr.getURIFromString(label.split("\\|")[0]);
        URI typeURI = ontMgr.getURIFromString(label.split("\\|")[1]);
        if (domainURI == null || typeURI == null) continue;
        oj.put(
            SemanticTypesUpdate.JsonKeys.DisplayDomainLabel.name(),
            domainURI.getLocalNameWithPrefixIfAvailable());
        oj.put(SemanticTypesUpdate.JsonKeys.Domain.name(), label.split("\\|")[0]);
        oj.put(
            SemanticTypesUpdate.JsonKeys.DisplayLabel.name(),
            typeURI.getLocalNameWithPrefixIfAvailable());
        oj.put(SemanticTypesUpdate.JsonKeys.FullType.name(), label.split("\\|")[1]);
      } else {
        URI typeURI = ontMgr.getURIFromString(label);
        if (typeURI == null) continue;
        oj.put(SemanticTypesUpdate.JsonKeys.FullType.name(), label);
        oj.put(
            SemanticTypesUpdate.JsonKeys.DisplayLabel.name(),
            typeURI.getLocalNameWithPrefixIfAvailable());
        oj.put(SemanticTypesUpdate.JsonKeys.DisplayDomainLabel.name(), "");
        oj.put(SemanticTypesUpdate.JsonKeys.Domain.name(), "");
      }

      oj.put("Probability", scoreMap.get(label));
      arr.put(oj);
    }
    obj.put("Labels", arr);
    return obj;
  }
 @Override
 public void write(JSONWriter writer) throws JSONException {
   writer.object();
   writer.array();
   for (String label : scoreMap.keySet()) {
     writer.object();
     writer.key(SemanticTypesUpdate.JsonKeys.FullType.name()).value(label);
     writer.key("probability").value(scoreMap.get(label));
     writer.endObject();
   }
   writer.endArray();
   writer.endObject();
 }