Незначительная проблема кодирования JSON на Android 4.1.2

У меня проблема на Android 4.1.2, где объект JSON, предоставленный нам нашим REST API, получает странное кодирование при отправке.

Это фрагмент json, который я получаю:

"cost":{ "amount": 0, "currency": "GBP" } 

Я хочу в значительной степени просто передать этот фрагмент назад так же (изменение других частей json), но это то, что я получаю на Android 4.1.2:

 "cost":"{amount=0, currency=GBP}" 

Функция, я полагаю, вызывает эту странную кодировку здесь:

  private StringEntity getEntityForRequest(final Payment payment, final PaymentDelegate delegate) { JSONObject json = new JSONObject(); MyApplication.getContext().addApplicationInformationToJSONObject(json); StringEntity entity = null; try { entity = new StringEntity(json.toString(), "UTF-8"); } catch (UnsupportedEncodingException e1) { payment.markAsFailed("Reservation failed, data returned not expected."); save(payment); if (delegate != null) { delegate.onFailure(new MyError(MyError.DEFAULT_STATUS, MyError.DEFAULT_TYPE, "Payment error", "Error during reservation")); } } return entity; } 

Это функция addApplicationIformationToJSONObject:

 /** * Adds system information to a JSON object. */ public void addApplicationInformationToJSONObject(JSONObject json) { try { try { json.put("app_version", getPackageManager().getPackageInfo(getPackageName(), 0).versionName); } catch (NameNotFoundException e) { json.put("app_version", "Unknown"); } json.put("device", getDeviceName()); json.put("os_type", "android"); json.put("os_version", String.format("%d", Build.VERSION.SDK_INT)); json.put("device_id", Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID)); } catch (JSONException e) { MyLog.e("MyApplication", "Error when adding system information to JSON"); } } 

Что вызывает эту странную кодировку?

Как я могу изменить код, чтобы избежать таких проблем?

Нашел решение. Похоже, что более старая версия интерпретирует этот фрагмент стоимости как строку, а не JSONObject. Выполнение этого, похоже, решает проблему:

 ticketObject.remove("cost"); ticketObject.put("cost", new JSONObject(getCost()));