Как реплицировать высокую иерархию JSON в объекты Java с помощью API Джексона? - PullRequest
0 голосов
/ 29 января 2019

Я хочу написать код в JAVA, используя JACKSON, который позволяет отображать высокую иерархию в JSON, как в следующем фрагменте.Кроме того, иерархия должна быть структурирована таким образом, чтобы результирующее приложение json зависело от условий «validFrom» и «validTo».

В приведенном ниже примере все даты для «validFrom» и «validTo» совпадаютно на практике даты могут различаться, т. е. каждый дочерний элемент может иметь несколько различных периодов действия:

Например, возможные даты для "DE":
"validFrom": ["2000-01-31"," 1995-01-31 "]
" validTo ": [" 2099-01-31 "," 2000-01-30 "]

Итак, для комбинации"validFrom "=" 1995-01-31 "и" validTo "=" 2000-01-30 "дочерний элемент" DE "гипотетически должен принадлежать родительскому элементу" Z9 "(не видно в примере json, представленном ниже!), но длясочетание «validFrom» = «2000-01-31» и «validTo» = «2099-01-31» должно принадлежать родительскому элементу «U6» (как в примере с json ниже).

Т.е. в зависимости от атрибутов «validFrom» и «validTo» дочерний элемент может принадлежать либо одному родительскому, либо другому родительскому элементу (в приведенном ниже примере «DE» принадлежит только родительскому «U6», но вопрос заключается в реализациитакие условия в Java-код таким образом, что существует возможность дифференциации).На одном уровне иерархии дочерний элемент должен принадлежать только одному родителю.

Как должен выглядеть код в java для написания этой структуры в json с использованием jackson?

{
"HierarchicalCode":[
{
    "code": "A1",
    "description": "Welt",
    "validFrom": "2000-01-31",
    "validTo": "2099-01-31",

    "children":[
        {
        "code": "U6",
        "description": "Inland",
        "validFrom": "2000-01-31",
        "validTo": "2099-01-31",

            "children":[
            {
            "code": "DE",
            "description": "Deutschland",
            "validFrom": "2000-01-31",
            "validTo": "2099-01-31"
            }
            ]
        },
        {
        "code": "Z9",
        "description": "Ausland",
        "validFrom": "2000-01-31",
        "validTo": "2099-01-31"

        }
    ]
}



]
}

1 Ответ

0 голосов
/ 29 января 2019

Я не совсем понял эту логику, основанную на датах validFrom и validTo.

Во-первых, вам нужно построить свою модель, во-вторых, вы должны сериализовать ее с использованием объектного сопоставителя.Пример:

public static void main(String[] args) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    HierarchicalCode hierarchicalCode = objectMapper.readValue(s, HierarchicalCode.class);
    // we constructed our hierarchical code here somehow, now serialize
    String result = objectMapper.writeValueAsString(hierarchicalCode);
    System.out.println(result);
}

private static class HierarchicalCode {

    @JsonProperty("HierarchicalCode")
    private List<HierarchicalElement> hierarchicalCode;

    public List<HierarchicalElement> getHierarchicalCode() {
        return hierarchicalCode;
    }
}

private static class HierarchicalElement {

    private String code;
    private String description;
    private Timestamp validFrom;
    private Timestamp validTo;
    private List<HierarchicalElement> children;

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    public Timestamp getValidFrom() {
        return validFrom;
    }

    public Timestamp getValidTo() {
        return validTo;
    }

    public List<HierarchicalElement> getChildren() {
        return children;
    }
}

Надеюсь, это поможет.

...