GSON. Как преобразовать объект json в массив json?

Теперь я получаю этот JSON от API:

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

Но цены динамичны, поэтому мне нужен JSON в этой форме

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

Как это сделать с помощью GSON?

Надеюсь, что эта часть кода поможет вам:

  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()); 

Вам нужно выполнить итерацию всех ключей объекта supplyPrice и создать новый JSONArray с использованием этого значения ключа, а затем назначить новый массив для поставкиPrice 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; } 

Затем вызовите функцию, в которой вы хотите

 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 использует классы POJO для анализа JSON в java-объектах.

Создать класс java, содержащий переменные с именами и типом данных, такими же, как ключи объекта JSON. Я думаю, что JSON, который вы получаете, не в правильном формате.

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

И ваш JSON должен быть

  { "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 }] } 

Затем вы можете использовать функцию `fromJson (String pJson, класс pClassType) GSON для преобразования в объект JAVA

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

Теперь вы можете использовать arraylist для получения данных.

Вы можете напрямую конвертировать его в HashMap or TreeMap затем перемещать карту по всем клавишам.

Это будет самый простой способ добиться того, чего вы хотите.

Благодаря Рохиту Патилу! Я изменил его код в мою ситуацию, и он работает!

 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; } 

Посмотрите на это .. может вам помочь.

  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));