Как извлечь дату из JSON с годом, днем и месяцем в виде отдельных полей в формате гггг-мм-дд

#java #json #date

Вопрос:

Я новичок в JSON, чтобы получить сведения о транзакции пользователя, я делаю вызов API одному из веб-сервисов в ответе JSON от API, дата транзакции указана ниже

    {
    "trasanction_date": {
        "year": 2021,
        "month": 6,
        "day": 16
    }
}
 

Мне нужно преобразовать указанную выше дату в формат гггг-мм-дд, чтобы вставить ее в Cassandra. Прямо сейчас я конвертирую, я создаю новый JSONObject из строки выше, такой как

 JSONObject trasaction = new JSONObject("{"trasanction_date":{"year":2021,"month":6,"day":16}}");

JSONObject date = trasaction.get("trasaction_date");

String year = date.getString("year");
String month = date.getString("month");
String day = date.getString("day");

//concatenating the final result to frame the date
String transactionDate = year month Day
 

Есть ли способ эффективно преобразовать приведенный выше JSON в формат гггг-мм-дд без извлечения и объединения строки. Пожалуйста, помогите с этим заранее, спасибо.

Комментарии:

1. Вам понадобится немного больше,чтобы соответствовать желаемому шаблону (у вас отсутствуют дефисы, а не количество цифр для месяца и дня — рассмотрите возможность использования String.format(Строка, объект…). Рассмотрите возможность использования java.time. Локализуйте, если ваша модель данных представляет собой нечто большее, чем переход от клиента к базе данных.

Ответ №1:

Создать TransactionDate.java класс ведьмы содержит три строковых поля year month , day с геттерами и сеттерами. Затем создайте TransactionDetails.java класс, у которого есть свойство типа TransactionDate и используйте библиотеку gson для преобразования строки JSON в объект java. Вы можете ознакомиться с этой статьей, чтобы узнать, как использовать gson

Затем внутри TransactionDate.java класса вы можете переопределить toString() метод на что-то вроде этого :

 @Override
String toString() {
  return this.year   " "   this.month   " "   this.day;
}
 

Наконец, вместо возвращаемой transactionDate строки вы можете получить TransactionDate объект TransactionDetails и вернуть его строковое представление.

Комментарии:

1. @user13906258 отлично!!