JSON Формат - принудительный массив - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь отформатировать json, нужно преобразовать несколько объектов в массив. Поле json поступает тремя разными способами: -

  1. Работает отлично.
"Deliverytypes": {
        "DeliveryType": [
            "REST",
            "WORKSHOP"
        ]
    }
org.json.JSONException: JSONObject["DeliveryType"] is not a JSONArray.
"Deliverytypes": {
        "DeliveryType": "REST"
    }
org.json.JSONException: JSONObject["Deliverytypes"] is not a JSONObject.
"Deliverytypes": ""
  1. работает отлично, но 2. и 3. выдают вышеупомянутую ошибку.

Мой код как ниже :

       if (json.has("Deliverytypes")) {
            unwrapDeliveryType(json);
        }
        
       private static void unwrapDeliveryType(JSONObject obj) throws 
        JSONException {
     JSONArray deliveryTypes = 
            obj.getJSONObject("Deliverytypes").getJSONArray("DeliveryType");
            obj.put("Deliverytypes", deliveryTypes);
      }

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

В своем классе модели вы можете добавить аннотацию, например:

  @JsonAdapter(ModelDeserialiser.class)
  private Model model;

, где ModelDeserialiser класс - это индивидуальный десериализатор для класса (т.е. он может десериализовать класс в различные форматы, которые вам требуются.

Затем классу ModelSerialiser потребуется реализовать интерфейс JsonDeserializer<T>, где T - это класс или суперкласс (я думаю?) Объектов, которые вы собираетесь выводить (может быть Object ). В индивидуальном десериализаторе вы должны использовать com.google.gson API.

0 голосов
/ 05 августа 2020

Вы можете сделать это с помощью instanceof

Вот так

Object types = obj.get("Deliverytypes");
if(types instanceof String) {
    // type 3, do what you need to do
} else if (types instanceof JSONObject) {
    JSONObject deliveryTypes = (JSONObject) types;
    Object type = deliveryTypes.get("DeliveryType");
    if(type instanceof String) {
        // Type 2
    } else if (type instanceof JSONArray) {
        JSONArray dTypes = (JSONArray) type;
        // Type 1
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...