¿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.
- Cómo detener la tarea Asyn en onPreExecute?
- Sugerencias de búsqueda de recursos de red en el cuadro Búsqueda rápida
- Org.json.JSONException: Cadena no terminada en el carácter 1834
- Cómo tomar array de json respuesta en java
- Obtener datos de mysql a android con php
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)?
- problema POST android JSONObject a PHP
- ¿Cómo se calcula el tiempo del rezo musulmán en una aplicación androide?
- Analizando JSON en Java
- Cómo crear Json con JsonArray y JsonObject
- Parsing Gson con Json no funciona para Android
- Cómo almacenar datos de JSON analizados en SQLite
- Cómo analizar JSON analizado para uso sin conexión
- Cómo invocar deserializar por defecto con gson
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):
-
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 )
-
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 .
-
org.json
no contiene una clase de análisis para analizar la cadena JSON. Mientras queorg.json.simple
contiene una clase de análisis. -
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. -
En palabras simples use
org.json.simple.JSONObject
para analizar solo y escriba cast enorg.json.JSONObject
para uso posterior dentro del programa.
- ¿Es posible iniciar un DialogFragment desde una preferencia en una preferenciaActivity?
- ¿Cómo detectar que un dispositivo ya descubierto y emparejado está disponible?