Работа с ответами json, которые могут измениться (не все ключи включаются каждый раз, могут быть добавлены новые ключи) - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужны некоторые указатели здесь.

Я говорю об API, который возвращает данные на основе определенных параметров.Я взял этот ответ и выровнял / отредактировал его, чтобы он соответствовал моей модели, а затем сохранил в базе данных.Все отлично работало до сегодняшнего дня, пока я не начал тестировать живую конечную точку (без фиктивных данных), и, как оказалось, формат ответа меняется.

Например, если у набора данных нет записи,вместо того, чтобы включать значение как ноль, некоторые ответы вообще не включают этот ключ.Это нарушает мою логику, чтобы сгладить и отредактировать, так как теперь мне нужно проверить, что каждое отдельное поле существует, прежде чем что-либо делать.

Вот 2 фрагмента того, как это может выглядеть

Пример1 - (Нет общего доступа)

{
    "request_info": {
        "city_id": 76211,
        "currency": "usd",
        "req_type": "geom"
    },
    "data": {
        "rental_counts": {
            "counts": {
                "private": {
                    "1": 17,
                    "2": 3,
                    "all": 20
                },
                "entire": {
                    "0": 2,
                    "1": 8,
                    "2": 11,
                    "3": 16,
                    "4": 14,
                    "5": 6,
                    "all": 57
                }
            },
        }
    }
}

Пример 2 (включая общий)

{
    "request_info": {
        "city_id": 76211,
        "currency": "usd",
        "req_type": "geom"
    },
    "data": {
        "rental_counts": {
            "counts": {
                "private": {
                    "1": 17,
                    "2": 3,
                    "all": 20
                },
                "entire": {
                    "0": 2,
                    "1": 8,
                    "2": 11,
                    "3": 16,
                    "4": 14,
                    "5": 6,
                    "all": 57
                },
                "shared": {
                    "0": 2,
                    "1": 8,
                    "all": 10
                }
            },
        }
    }
}

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

Я смотрел на Roar, но все еще не совсем понимаю, как он работаетотлично.Это что-то, с чем может справиться Роар, или объект json должен быть предварительно определенным, а не динамическим?

1 Ответ

0 голосов
/ 22 марта 2019

Я нашел более простое решение, чем рев или десериализаторы.Метод среза Ruby позволяет вам выбирать только предопределенные ключи и игнорировать все остальные.Я вызываю этот метод после выравнивания моего хэша, но перед использованием активной записи для импорта.

...