Отображение атрибутов JSON в целые числа с использованием Spring Java - PullRequest
2 голосов
/ 21 марта 2020

У меня много JSON файлов в следующем формате. Я хочу сопоставить один атрибут с именем Сроки с целым числом .

test. json

"Rating": {
  "ratingValue": "4.636365",
  "bestRating": "5",
  "worstRating": "1",
  "ratingCount": "66"
 },
 "Timings": {
  "cookTime": "PT1H",
  "prepTime": "PT10M",
  "totalTime": "PT1H10M"
 }

Я хочу сохранить вывод в другом файле JSON после сопоставления. Допустим, totalTime in Timings равно 1H10M , тогда мы присваиваем это как " totalTime: 7 ". Если это " 30M ", мы можем присвоить это как " totalTime: 3 ". Я хочу сделать это, используя java.

Требуемый вывод

"Rating": 
{
  "ratingValue": "4.636365",
},
 "Timings": 
{
    "totalTime": "7"
}

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Я пробовал это:

class Timings {

    private String cookTime;
    private String prepTime;
    private String totalTime;

    public String getCookTime() {
        return cookTime;
    }

    public void setCookTime(String cookTime) {
        this.cookTime = cookTime;
    }

    public String getPrepTime() {
        return prepTime;
    }

    public void setPrepTime(String prepTime) {
        this.prepTime = prepTime;
    }

    public String getTotalTime() {
        return totalTime;
    }

    public void setTotalTime(String totalTime) {
        this.totalTime = totalTime;
    }

    @Override
    public String toString() {
        return "Timings [cookTime=" + cookTime + ", prepTime=" + prepTime + ", totalTime=" + totalTime + "]";
    }

}
public class Test {
    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        Timings obj = mapper.readValue(new File("C:\\Users\\Anish\\Desktop\\abc.json"), Timings.class);
        String totalTime = obj.getTotalTime().split("PT")[1];
        int total = 0;
        if (totalTime != null && !totalTime.isEmpty()) {
            total = returnTotalTime(totalTime);
        }
        ObjectNode mainNode = mapper.createObjectNode();
        ObjectNode timingNode = mapper.createObjectNode();
        childNode.put("totalTime", (total > 9) ? (total / 10) : total);
        mainNode.set("Timings", timingNode);
        String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(mainNode);
        System.out.println(json);

    }

    private static int returnTotalTime(String totalTime) {
    if (totalTime != null && !totalTime.isEmpty()) {
        String[] timeValues = totalTime.split("H");
        if (timeValues.length == 0) {
            return 0;
        } else if (timeValues.length < 2) {
            if (timeValues[0].contains("M")) {
                return (timeValues[0].split("M").length <= 0) ? 0
                        : timeValues[0].split("M")[0].isEmpty() ? 0 : Integer.parseInt(timeValues[0].split("M")[0]);
            }
            return timeValues[0].isEmpty() ? 0 : Integer.parseInt(timeValues[0]) * 60;
        }
        int hour = timeValues[0].isEmpty() ? 0 : Integer.parseInt(timeValues[0]) * 60;
        int mins = (timeValues[1].split("M").length <= 0) ? 0
                : timeValues[1].split("M")[0].isEmpty() ? 0 : Integer.parseInt(timeValues[1].split("M")[0]);
        return (hour + mins);
    }
    return 0;
}

ab c. json

{
  "cookTime": "PT1H",
  "prepTime": "PT10M",
  "totalTime": "PT1H10M"
}

Выход:

{
  "Timings" : {
    "totalTime" : "7"
  }
}

Когда "totalTime": "PT30M", то :

Выход:

{
  "Timings" : {
    "totalTime" : "3"
  }
}

Когда "totalTime": "PT23M", тогда:

Выход:

{
  "Timings" : {
    "totalTime" : "2"
  }
}
0 голосов
/ 21 марта 2020

Вы можете использовать любую библиотеку для анализа Json данных в зависимости от ваших целей.

, например, org. json - хороший выбор, и вот пример:

JSONObject object = new JSONObject(stringData);
String time = object.getJSONObject("Timings").getString("cookTime");

таким образом, вы можете анализировать все Json данные и вести бизнес после этого.

Также вы можете использовать отображение ваших данных в класс с помощью gson или других инструментов.

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