GSON. Cómo convertir json objeto a json array?

Ahora estoy recibiendo este JSON de API:

{"supplyPrice": { "CAD": 78, "CHF": 54600.78, "USD": 20735.52 }} 

Pero los precios son dinámicos, por eso necesito JSON en esta forma

 { "supplyPrice": [ { "name": "CAD", "value": "78" }, { "name": "TRY", "value": "34961.94" }, { "name": "CHF", "value": "54600.78" }, { "name": "USD", "value": "20735.52" } ] } 

¿Cómo hacer esto usando GSON?

Esperamos que esta parte del código le ayude:

  String json = "{\"supplyPrice\": {\n" + " \"CAD\": 78,\n" + " \"CHF\": 54600.78,\n" + " \"USD\": 20735.52\n" + " }}"; Gson gson = new Gson(); JsonObject jsonObject = gson.fromJson(json, JsonObject.class); JsonObject supplyPrice = jsonObject.get("supplyPrice").getAsJsonObject(); Type type = new TypeToken<HashMap<String, Double>>() { }.getType(); HashMap<String, Double> parsedJson = gson.fromJson(supplyPrice, type); JsonArray jsonArray = new JsonArray(); for(String key : parsedJson.keySet()) { JsonObject jo = new JsonObject(); jo.addProperty("name", key); jo.addProperty("value", parsedJson.get(key)); jsonArray.add(jo); } JsonObject result = new JsonObject(); result.add("supplyPrice", jsonArray.getAsJsonArray()); 

Necesita iterar todas las claves del objeto supplyPrice y crear New JSONArray utilizando ese valor de clave y asignar una nueva matriz a supplyPrice key

 JSONObject changeSupplyPrice(JSONObject JSONObj){ try { JSONObject supplyPrice =JSONObj.getJSONObject("supplyPrice"); JSONArray supplyPriceArray = new JSONArray(); Iterator<?> keys = supplyPrice.keys(); while( keys.hasNext() ) { String key = (String)keys.next(); Log.e("JSON Array key",key); supplyPriceArray.put(new JSONObject("{"+key+":"+supplyPrice.getString(key)+"}")); } JSONObj.put("supplyPrice", supplyPriceArray); return JSONObj; } catch (JSONException e) { e.printStackTrace(); } return null; } 

Entonces llama a la función donde quieras

 try { JSONObject JSONObj = new JSONObject("{'taxes': [],'name': 'Laboriosam iusto eum','requiresShipping': false, 'taxable': true, 'sku': 'QBA84J18832', 'product': 12, 'supplyPrice': { 'CAD': 78, 'CHF': 54600.78, 'USD': 20735.52 }}"); JSONObj = changeSupplyPrice(JSONObj); Log.e("Return JSON Object",JSONObj.toString()); } catch (JSONException e) { e.printStackTrace(); } 

GSON utiliza clases POJO para analizar JSON en objetos java.

Crear Una clase java que contiene variables con nombres y tipo de datos igual que las claves del objeto JSON. Creo que el JSON que está recibiendo no está en el formato correcto.

 Class SupplyPrice{ double CAD; double CHF; double TRY } Class SupplyPriceContainer{ ArrayList<SupplyPrice> supplyPrice; } 

Y su JSON debe ser

  { "CAD": 78, "CHF": 54600.78, "USD": 20735.52 } { "supplyPrice": [{ "CAD": 78, "CHF": 0, "USD": 0 }, { "CAD": 0, "CHF": 54600.00, "USD": 0 }, { "CAD": 0, "CHF": 0, "USD": 20735.52 }] } 

A continuación, puede utilizar GSON 'fromJson (String pJson, Class pClassType) para convertir a un objeto JAVA

  Gson gson = new Gson() ArrayList<SupplyPrice> suplyPrices = gson.fromJson(pJsonString, SupplyPrice.class); 

Ahora puede utilizar el arraylist para obtener los datos.

Puede convertirlo directamente a un HashMap or TreeMap luego navegar por su mapa para todas las claves.

Esta será la manera más sencilla de lograr lo que quieres.

Gracias a Rohit Patil! He modificado su código a mi situación y funciona!

 private JSONObject modifyPrices(JSONObject JSONObj) { try { JSONObject supplyPrice = JSONObj.getJSONObject("supplyPrice"); JSONArray supplyPriceArray = new JSONArray(); Iterator<?> keys = supplyPrice.keys(); while (keys.hasNext()) { String key = (String) keys.next(); String value = supplyPrice.getString(key); supplyPriceArray.put(new JSONObject("{\"name\":" + key + ",\"value\":" + value + "}")); } JSONObj.put("supplyPrice", supplyPriceArray); return JSONObj; } catch (JSONException e) { e.printStackTrace(); } return null; } 

Una vez que mire esto .. puede ayudarle.

  JSONObject json= json.getJSONObject("supplyPrice"); Iterator i = json.keys(); JSONArray jsonArray = new JSONArray(); while (i.hasNext()){ String key = (String) i.next(); jsonArray.put(json.get(key)); 
  • JSON VS simple manipulación de cadenas para analizar HttpRequest en Android
  • Analizar: enviar notificaciones push desde la aplicación
  • Optimización del análisis de JSON en Android
  • Envío de los datos al servidor a través del correo cuando la conexión a Internet vuelve
  • Org.json.JSONObject no se puede convertir en JSONArray
  • Errores de json-parsing en tiempo de ejecución
  • Jsoup no puede leer el archivo de retorno xml
  • Android NumberFormatException: Doble no válido - excepto que el valor es un doble válido
  • Desvío de paquetes VPN
  • Json Parsing de Url en Android, no funciona
  • Clase de modelo para Jackson Parser para analizar propiedades en mayúsculas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.