Как проанализировать JSON с помощью GSON, чтобы получить JSONObject, где он не анализируется, как требуется для плохого JSON? - PullRequest
0 голосов
/ 11 октября 2018

Вопрос в том, что когда я анализирую следующую JSON с использованием библиотеки GSON , я получаю GSON класс в виде POJO , где каждый ключ и значение имеют геттер и сеттер.

См. Пример такого плохого JSON ниже, как неправильно проанализированный GSON library

Теперь это не тот формат, который мне требуется.Вместо этого я хочу получить объект hashmap в ответ (библиотека может вернуть ArrayList, тогда почему не TreeHashMap?) .Для меня эта часть JSON не анализируется GSON, как я желаю.

Мой вопрос заключается в том, должен ли я попросить свою вспомогательную команду переформатировать JSON , как во второй JSON ниже или попытаться использовать библиотеку GSON как есть, но программно извлечь ее JSONObject из JSON , где ключи являются динамическими по своей природе, и неясно, есть лиесть пара таких ключей или тысячи таких в JSON , который возвращается.

См. пример good JSON ниже, преобразованный из bad JSON, который я предоставил, поскольку он может быть легко проанализирован GSON в формат, который я желаю

Для этого я должен объяснитьПравило моей бэкэнд-команды:

ПРАВИЛО:

Ключи не должны быть динамическими по своей природе.Если в случае, если ключи являются динамическими, список доступных для поиска ключей также должен быть определен в том же JSON или в отдельной MODEL JSON , которую следует запрашивать при вызове до этого JSON анализируется (в отдельном ответе API веб-службы).

Пример плохого JSON:

{"Grocery": [
      {
        "id": 2,
        "name": "Kirana Store",
        "parent_id": 1,
        "category_image": "",
        "category_type": "product",
        "position": 0,
        "front_status": 0,
        "slug_url": "daal-pulses",
        "created_at": "2016-06-27 06:44:59",
        "updated_at": "2018-02-13 04:55:33"
      },
      {
        "id": 3,
        "name": "Departmental Store",
        "parent_id": 1,
        "category_image": "",
        "category_type": "product",
        "position": 0,
        "front_status": 0,
        "slug_url": "dry-fruits",
        "created_at": "2016-06-27 06:45:12",
        "updated_at": "2018-02-13 04:56:01"
      }
    ]}

, и может быть тысячи динамических ключейкак "Grocery", например, "Stationary", "Hosiery", "Medicines" и т. д. как категории товаров. GSON создаст геттеры для каждого такого динамического ключа.

Должен быть исправлен и возвращен API веб-службы следующим образом:

{

  "Products": [

    {

      "parent_category": "Grocery",

      "items": [

        {

          "id": 2,

          "name": "Kirana Store",

          "parent_id": 1,

          "category_image": "",

          "category_type": "product",

          "position": 0,

          "front_status": 0,

          "slug_url": "daal-pulses",

          "created_at": "2016-06-27 06:44:59",

          "updated_at": "2018-02-13 04:55:33"

        },

        {

          "id": 3,

          "name": "Departmental Store",

          "parent_id": 1,

          "category_image": "",

          "category_type": "product",

          "position": 0,

          "front_status": 0,

          "slug_url": "dry-fruits",

          "created_at": "2016-06-27 06:45:12",

          "updated_at": "2018-02-13 04:56:01"

        }

      ]

    }

  ]

}

Гдемогут быть тысячи категорий как Grocery, как описано выше, и получатели для таких ключей не могут быть вычислены во время выполнения.Но если эти ключи преобразуются в значения, представленные общим ключом каждое, как в приведенном выше исправлении, то иметь общий получатель для этого ключа "parent_category" имеет смысл.Теперь это JSON , который GSON может анализировать для моего желаемого выхода.Но дело в том, что наша команда не сотрудничает, чтобы что-то изменить, потому что здесь есть переделки.Если я переключусь на традиционный синтаксический анализ, на моем конце также будет огромная переделка.

ИЛИ Я должен найти способ, которым я могу извлечь JSONObject из JSON с использованием GSON , чтобы я мог разобрать его вручную.

Поэтому мне нужно что-то, чтобы сэкономить время, которое уйдет на эту переделку.

1 Ответ

0 голосов
/ 11 октября 2018

После получения JSONObject, который GSON не анализирует должным образом:

Получение JSONObject из JSON, где GSON не может его обработать :

Использование keySet() изJSONObject, чтобы получить ключи от JSON, как Set collection.Перебирая ключи в наборе, я получаю соответствующие значения в текущем разделе JSON.

Пожалуйста, посмотрите пример:

Примеры кода Java для org.json.JSONObject.keySet ()

Теперь, если GSON не может выполнить синтаксический анализ таких форматов JSON, где он предоставляет методы получения и установки для каждого ключа и если разработчик должен анализировать JSON вручную, тогда еще есть шанс сэкономить время, используя это решение.Но до тех пор, пока GSON не внесет поправки, как вы предлагаете, вы должны жить с этим решением.

Что мне делать, если я был в команде разработчиков GSON?:

Должен был быть другой вид аннотации, где вместо получения геттеров и сеттеров можно было бы потребовать от библиотеки GSON вернуть key-value пар в виде hash-map или array-list POJOна выходе.Это в настоящее время не существует.

Happy Coding; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...