Below is my method which makes the JSONObject and then print out the JSONString.
I am using Google GSON.
private String gen
Your problem is that with
jsonObject.addProperty("ap", ap.toString());
you are adding a property which is the String representation of a Set in Java. It has nothing to do with JSON (even if the format looks the same).
You will have to convert your Set into a JsonElement (a JsonArray really but you won't see that).
Create a Gson object somewhere
Gson gson = new Gson();
and use it to convert your Set elements to JsonElement objects and add them to the JsonObject.
jsonObject.add("ap", gson.toJsonTree(ap));
jsonObject.add("bp", gson.toJsonTree(bp));
Gson has its conventions, it converts a Set into a JsonArray which is a sub type of JsonElement and you can therefore add it with JsonObject#add(String, JsonElement).