JSONObject no tiene demasiada sobrecarga adicional en la parte superior de un HashMap. Si está de acuerdo con el uso de un HashMap, entonces debería estar bien usando un JSONObject. Esto se proporciona si desea generar JSON.
JSONObject comprueba la validez de los valores que está almacenando como parte de su JSONObject, para asegurarse de que se ajusta a la especificación JSON. Por ej. Los valores NaN no forman parte de JSON válido. Aparte de esto, JSONObject puede generar cadenas json (regular | prettfied). Esas cadenas pueden ser bastante grandes, dependiendo de la cantidad de JSON. Además, JSONObject usa StringBuffer, por lo que una de las muchas cosas que haría sería reemplazar todas las instancias de StringBuffer con StringBuilder.
JSONObject (de org.json) es una de las bibliotecas JSON simples que puede usar. Si quieres algo muy eficiente, usa algo como Jackson.
En realidad no estoy de acuerdo con esto, ya que JSONObject es específico de una biblioteca, a diferencia de Maps, al exponerlo como un tipo agregará más acoplamiento a una biblioteca específica y sus tipos de datos. Entonces no diría categóricamente que siempre debería usarse. – StaxMan
@Stax, puedo ver su punto. Pero, si necesita desvincular una parte del código, siempre puede extraer los datos en un mapa usted mismo. – jjnguy
Es cierto. Creo que en general es más una cuestión de POJOs vs abstracciones específicas de la biblioteca; Me gusta mantener los aspectos de formato de datos más cerca de los bordes. – StaxMan