Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Jackson ObjectMapper con claves JSON arbitrarias

Estoy usando Jackson 1.9.5 en un proyecto de Android para analizar archivos JSON.

Hasta ahora no he tenido ningún problema, y ​​puedo analizar archivos finos usando el código siguiente:

  • Android - Cómo deshabilitar el botón Buscar, cómo implementar onSearchRequested ()?
  • Restablecer desplazamiento en ScrollView
  • Cómo mostrar Toast en Android?
  • EditText: Desactivar el menú emergente de Pegar / Reemplazar en el evento de clic del controlador de selección de texto
  • Seamless Looping con SoundPool en Android?
  • Posible beneficio de firmar diferentes aplicaciones de Android con diferentes claves / Alias
  • AssetManager mgr = getAssets(); ObjectMapper mapper = new ObjectMapper(); try { InputStream ifp = mgr.open("detail_schema.json"); schema = mapper.readValue(ifp, DetailSchema.class); } catch (IOException e) { e.printStackTrace(); } 

    Donde la clase DetailSchema consiste en una mezcla de clases y clases primitivas. Ahora estoy corriendo en un problema donde quiero analizar algunos JSON como el siguiente:

     "fields": { "Suburb": "Paddington", "State": "NSW", "Post Code": "2074", "Lollipop": "Foo Bar Haz" } 

    Donde no puedo saber las teclas de mapa antes de mano (pueden ser definidos por el usuario). Como tal, no estoy seguro de cómo debería ser la clase de Java asociada.

    Es decir, para este ejemplo, podría verse como:

     public class MyClass { public String Suburb; public String State; public String PostCode; public String Lollipop; } 

    Pero esto puede no ser correcto para otra instancia del archivo JSON. Lo ideal es que necesite alguna forma para que Jackson muestre valores a algo como un NameValuePair . Sospecho que la asignación automática de objetos no puede ser una opción en este caso – ¿alguien puede confirmar o negar esto?

  • Errores de unmarshalling en la aplicación de Android con clases parcelables personalizadas
  • Obtener Aplicaciones Directorio de empresas
  • ¿Cómo zipalign el archivo .apk usando eclipse?
  • ¿Cómo obtengo una copia del icono del menú de desbordamiento de Android?
  • No se puede administrar a requestFocus a Spinner
  • Prueba de facturación en la aplicación: "El editor no puede comprar este elemento"
  • One Solution collect form web for “Jackson ObjectMapper con claves JSON arbitrarias”

    Tienes dos opciones. O bien puede utilizar readTree en ObjectMapper , que devuelve un JsonNode . Trabajar con un JsonNode es muy parecido a trabajar con un árbol, por lo que puede obtener nodos de niños, leer valores, etcétera:

     InputStream ifp = mgr.open("detail_schema.json"); JsonNode root = mapper.readTree(ifp); JsonNode fields = root.get("fields"); for (JsonNode children : fields.getElements()) { // ... } 

    Entonces necesitaría construir su objeto DetailSchema manualmente.

    O, puede dejar que Jackson lo deserialice como un mapa, en cuyo caso usaría su código, pero donde MyClass sería así:

     public class MyClass { public Map<String, Object> fields; // getter/setters } 

    Probablemente también puede escribir los valores de mapa como String si está seguro de que las entradas son texto en json. (En realidad, no estoy seguro de qué tipo de ejecución Jackson hace, tal vez permitirá nada de todos modos …)

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.