Ключ JSON с пробелами в Java POJO - PullRequest
0 голосов
/ 22 марта 2019

У меня следующее JSON, и проблема в теге Win the match из-за пробелов:

{
    "api": {
        "results": 10,
        "odds": {
            "Win the match": {
                "1": {
                    "label": "1",
                    "pos": "1",
                    "odd": "1.51"
                },
                "2": {
                    "label": "2",
                    "pos": "3",
                    "odd": "4.90"
                },
                "N": {
                    "label": "N",
                    "pos": "2",
                    "odd": "3.05"
                }
            }
        }
    }
}

И в одном из моих Java Class POJO:

import com.fasterxml.jackson.annotation.JsonProperty;

public class OddsClass {

    private The1_N22_EMT winTheMatch;

    @JsonProperty("Win the match")
    public The1_N22_EMT getWinTheMatch() { return winTheMatch; }
    @JsonProperty("Win the match")
    public void setWinTheMatch(The1_N22_EMT value) { this.winTheMatch = value; }

}

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

1 Ответ

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

EDIT

Полезная нагрузка JSON проще, чем вы думаете.Для динамических клавиш используйте Map.В вашем случае у вас есть Map в Map, потому что у вас есть два уровня динамических клавиш.Иногда генерируется POJO из JSON очень сложно.Вы должны сгенерировать POJO модель из JSON Schema.Ваша модель может выглядеть следующим образом:

class ApiWrapper {

    private Api api;

    // getters, setters, toString
}

class Api {

    private int results;
    private Map<String, Map<String, Match>> odds;

    // getters, setters, toString
}

class Match {

    private String label;
    private String pos;
    private String odd;

    // getters, setters, toString
}

Перед редактированием

У вас есть два хитрых случая:

  • Ключ с пробелами - необходимо использовать JsonProperty аннотацию.
  • Объект с динамическими ключами - его следует сопоставить с Map<String, ?>.

Простой пример с POJO модель:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.util.Map;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        ObjectMapper mapper = new ObjectMapper();

        ApiWrapper api = mapper.readValue(jsonFile, ApiWrapper.class);

        System.out.println(api);
    }
}

class ApiWrapper {

    private Api api;

    // getters, setters, toString
}

class Api {

    private int results;
    private Odds odds;

    // getters, setters, toString
}

class Odds {

    @JsonProperty("Win the match")
    private Map<String, Match> winTheMatch;

    // getters, setters, toString
}

class Match {

    private String label;
    private String pos;
    private String odd;

    // getters, setters, toString
}

См. Также:

...