¿Cuál usar? JSONObject de org.json VS JsonObject de javax.json

Esta es mi primera publicación. Como desarrollador Android en ciernes, leí mensajes de SO casi diariamente en varios temas, pero para esta pregunta, no encontré ninguna ayuda de Google ni de SO.

Mi investigación hasta ahora:
La búsqueda de esta pregunta era más difícil de lo normal porque los motores de búsqueda no parecen importar la sensibilidad de la casilla, que es vital en este problema. La búsqueda en Google solo me proporcionó enlaces a las propias clases, artículos antiguos o artículos completamente irrelevantes. El más cercano que conseguí fue JSONArray vs JSONObject, y esa es una pregunta completamente diferente. Tan buscando dio los mismos resultados. Por lo que puedo decir, todos los puestos pertinentes en SO se refieren a JSONObject y no JsonObject.

Ni Oracle ni la documentación de json.org mencionaron el otro lado, ni tampoco la página de JSONObject para desarrolladores de Android que usa la biblioteca org.json.

Http://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html
Http://www.json.org/javadoc/org/json/JSONObject.html
También habría publicado un enlace a la página de referencia de Android para JSONObject, pero mi representante como novato es demasiado bajo.

Historia de problema (s): Estaba leyendo acerca de la codificación y decodificación de Json de la página de Oracle, e intenté copiar y pegar en mi AndriodStudio IDE, que inmediatamente produjo un error, para el cual no sugirió una declaración de importación como lo hace normalmente . He llegado a aprender que significa que la clase no es parte de las bibliotecas integradas.

El problema era que el código que pegué en JsonObject usado (que viene de la biblioteca de javax.json) y no JSONObject (que viene de la biblioteca de org.json). Cuando noté la diferencia en el caso entre la página de Android y la página de Oracle, alteré mi código de Json a JSON e inmediatamente mi IDE ofreció la declaración de importación org.json.

Pregunta (s): ¿Por qué una clase de Oracle no forma parte de las bibliotecas predeterminadas cuando se trata de una biblioteca externa?
¿Es JSON la vieja y desaprobada manera y Json la nueva y correcta manera?
¿Son funcionalmente idénticos? Si no, por favor proporcione ejemplos?
¿Hay algunas situaciones mejores para una y otras para la otra?
ULTIMAMENTE, ¿qué debo usar, y por qué (si no están cubiertos)?
Si, javax.json, ¿dónde está el mejor lugar (más seguro) para descargar esa biblioteca)?

Un poco tarde, pero quería compartir mi opinión sobre esto.

Me enfrenté a este problema recientemente cuando encontré un proyecto de Java con ambas bibliotecas y se utilizaron al mismo tiempo.

Creo que org.json es más fácil de leer y usar, por 2 razones principales (para mis necesidades):

  1. JsonObject es inmutable. No puede agregar nuevos pares de clave / valor a un JsonObject ya existente (referencia aquí: javax.json: Añadir nuevo JsonNumber a JsonObject existente )

  2. Se necesitan unas pocas líneas para imprimir bastante un JsonObject o JsonArray, mientras que sólo se necesita 1 línea para hacerlo con JSONObject o JSONArray. Ejemplo:

     StringWriter sw = new StringWriter(); Map<String, Object> properties = new HashMap<>(); properties.put(JsonGenerator.PRETTY_PRINTING, true); JsonWriterFactory writerFactory = Json.createWriterFactory(properties); JsonWriter jsonWriter = writerFactory.createWriter(sw); jsonWriter.writeObject(jsonObject); //JsonObject created before jsonWriter.close(); String prettyPrintedJSON = sw.toString(); 

Ese es el código que utilizo para obtener un JSON indentado para escribir en un archivo. Y con org.json sólo necesito jsonObject.toString(4) .

Otra diferencia son los constructores. Necesitará un JsonObjectBuilder para crear un JSON con javax.json . Un paso más que se puede evitar.

Estoy seguro de que hay más diferencias (no estoy seguro de si es posible crear un JsonObject de una cadena), pero estos son mis pensamientos.

Te recomiendo que utilices el kit de herramientas json-simple de Google para trabajar con JSON Objects. Proporciona funciones útiles y no tiene dependencia de las bibliotecas externas que resultó ser un gran problema durante el desarrollo de las aplicaciones de Android.

Para responder a su pregunta: Si no desea usar json-simple en su proyecto, debe usar el JSONObject de org.json, porque es proporcionado por el JDK de Android. Para obtener más información, consulte http://developer.android.com/reference/org/json/JSONObject.html .

  1. org.json no contiene una clase de análisis para analizar la cadena JSON. Mientras que org.json.simple contiene una clase de análisis.

  2. org.json.JSONObject contiene muchos métodos getter para obtener directamente como int, boolean, objeto, cadena, JSON Array, etc. org.json.simple.JSONObject no contiene métodos específicos, por lo que necesitas escribir casting cada vez que consigues Valor de una clave en particular.

  3. En palabras simples use org.json.simple.JSONObject para analizar solo y escriba cast en org.json.JSONObject para uso posterior dentro del programa.

  • Enviar notificación múltiple a GCM usando JSON
  • Convertir InputStream a JSONObject
  • Cursor de Android a JSONArray
  • ¿Cómo puedo enviar los encabezados de autenticación básica HTTP en Android?
  • Gson - Igual nombre de campo, diferentes tipos
  • Hacer formas dinámicas (el mejor enfoque)
  • Android analiza la serie Json de cadenas
  • Determine si JSON es un JSONObject o JSONArray
  • Simple analizar JSON de URL en Android y mostrar en listview
  • ¿Cuál es la causa de este problema "No se puede convertir el argumento de la clase de tipo org.json.JSONArray" en reaccionar-androide nativo?
  • Usando HttpClient y HttpPost en Android con parámetros post
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.