Как получить доступ к имени объекта JSON? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть это JSON, которое вернуло меня из базы данных Firebase Realtime.

{
       "betslipid-4322": {
            "amount": 100,
            "bets": [
                {
                    "betType": "FT_RESULT_0",
                    "matchid": "ts-fb",
                    "odd": 2.4,
                    "status": "WAITING"
                }
            ],
            "status": "WAITING"
        },
        "betslipid-4323": {
            "amount": 7.5,
            "bets": [
                {
                    "betType": "FT_RESULT_2",
                    "matchid": "gs-fb",
                    "odd": 2.7,
                    "status": "WAITING"
                },
                {
                    "betType": "FT_RESULT_1",
                    "matchid": "gs-gb",
                    "odd": 1.3,
                    "status": "WAITING"
                }
            ],
            "status": "WAITING"
        }
}

Я хочу разместить атрибуты этого JSON (включая betSlipID в начале) для следующего Java class.

public class BetSlip {

    private List<Bet> bets;

    private Float amount;

    private BetStatus status;

    private betSlipID;
}

Однако я не смог получить доступ к betSlipID, которые в данном случае были "betslipid-4322" и "betslipid-4323", и я также не смог преобразовать JSON в мой * Класс 1015 * по следующему коду.

private RestTemplate restTemplate = new RestTemplate();
List<BetSlip> betSlip = restTemplate.getForObject(getDatabaseLink("incomplete-betslips"), ArrayList.class);

Обратите внимание, что я не знаю betSlipID, когда получаю ответ JSON, поэтому я не могу создать другой класс, который включает переменную с именем входящего betSlipID.

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Я не говорю, что это оптимально, но вы можете следовать этому, чтобы выполнить свою задачу, так как ваш betslipid-x является переменной, я описываю только шаги, которые необходимо выполнить:

  1. просто верните a json объект из вашего restTemplate см. Spring restTemplate получить необработанный json string
  2. получите ключи, применяющие keySet() к вашему возвращенному json, и вы получите все свои betslipid -x
  3. основываясь на этом, получить связанный объект этого ключа и десериализовать в вашем классе BetSlip и установить ключ как betSlipID.
  4. Таким образом, вы получите желаемый объект.

Это должно сделать вашу работу.
Дайте мне знать, если вам нужны дополнительные разъяснения.

0 голосов
/ 03 марта 2020

После комментария @Noshaf вот решение:

HashMap<String,BetSlip> betSlipWithoutID = restTemplate.getForObject(getDatabaseLink("incomplete-betslips"), HashMap.class);

После создания этого HashMap теперь необходимо создать класс BetSlip с betSlipID:

ObjectMapper mapper = new ObjectMapper();

BetSlip betSlip = mapper.convertValue(betSlipWithoutID.get(betSlipWithoutID.keySet().iterator().next()), BetSlip.class);

betSlip.setBetSlipID(betSlipWithoutID.keySet().iterator().next());

Здесь мы go, betSlip готов к использованию с установленным атрибутом betSlipID.

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