Создание объекта java для файла json, где ключи всегда разные

Файлы .json выглядят примерно так

XYZ.json

{
"Business Information": {
    "xpath": "//span[text()='Business Information']",
    "elementType": "LINK",
    "findBy": "XPath"
},
"AP and Ship-To Information": {
    "xpath": "//span[text()='AP and Ship-To Information']",
    "elementType": "LINK",
    "findBy": "XPath"
},
"Other Business Details": {
    "xpath": "//span[text()='Other Business Details']",
    "elementType": "LINK",
    "findBy": "XPath"
},
"Bank and Trade Information": {
    "xpath": "//span[text()='Bank and Trade Information']",
    "elementType": "LINK",
    "findBy": "XPath"
}
}

Я хочу создать объект Java, в котором я могу хранить эти ключи. Но проблема в том, что есть сотни разных ключей. Создать объект для вложенных элементов несложно.

Tabs.class

public class Tabs {
    private String xpath;
    private String elementType;
    private String findBy;
}

Но для класса TabNames ...

TabNames.class

public class TabNames {
    Tab Business Name; // Cannot create Object with whitespace
    Tab 2;
    Tab 3;
    and so on.. // there maybe 100s of tabs from JSON

Настроить такой объект было бы невозможно и просто глупо. Может ли кто-нибудь предложить альтернативное или лучшее решение проблемы?

вы можете изменить макет / структуру файла JSON?

Axel Amthor 31.10.2018 12:07
2
1
53
2

Ответы 2

Для этого можно использовать HashMap, например:

HashMap<String, Tabs> myTabs = new HashMap<>();
myTabs.put("Business Information", new Tabs());

Здесь вы должны заменить new Tabs() на свой проанализированный класс Tabs и заменить "Business Information" на ключ, связанный с классом Tabs. Это можно сделать в цикле for, перебирая ваш объект JSON.

Вы можете получить свои объекты Tabs впоследствии на основе значения Key для HashMap:

Tabs tab = myTabs.get("Business Information");

Как мне сохранить ключ в объекте и сохранить форматирование при последующей записи этого объекта в аналогичный файл .json?

Shivam Kedia 31.10.2018 12:39

GSON автоматически проанализирует объекты HashMap в правильном формате JSON.

Mark 31.10.2018 12:41

вместо структуры вроде

{
"Business Information": {
    "xpath": "//span[text()='Business Information']",
    "elementType": "LINK",
    "findBy": "XPath"
},

Я рекомендую это:

[
    {
        "type": "tab",
        "name": "Business Information",
        "xpath": "//span[text()='Business Information']",
        "elementType": "LINK",
        "findBy": "XPath"
    }, {
        "type": "tab",
        "name": "Business Information",
        "xpath": "//span[text()='Business Information']",
        "elementType": "LINK",
        "findBy": "XPath"
    }, ...

]

Теперь вы можете легко перебирать массив JSON, и каждый из членов является объектом класса tabs.class. В свойствах нет места, поэтому их можно использовать напрямую.

Это было бы идеальным решением, но форматирование .json происходит из частного фреймворка, который необходимо полностью изменить.

Shivam Kedia 31.10.2018 12:36

Другие вопросы по теме