properties keys must be Strings here but nothing check it statically - not sure if you want to limit keys to Strings or use a generic iterator. If you want to limit to Strings, IMO we should use a `Map<String,?>`  instead of `JSONObject`