Как сериализовать такой объект?

389
06 января 2017, 09:25
{    
"datetimes": [
 {
  "date": "2016-12-14",
  "start_time": "08:00:00",
  "end_time": "22:00:25"
 },
 {
  "date": "2016-12-15",
  "start_time": "08:00:00",
  "end_time": "22:00:25"
 },
 ...
]
}

Дополнение к вопросу:

public class UserDateDeserializer implements JsonSerializer<Date> {
    @Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
    JsonObject obj = new JsonObject().getAsJsonObject("datetimes");
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    JsonArray jsonArray = obj.getAsJsonArray();
    jsonArray.add(new JsonPrimitive(dateFormat.format(src)));

    return obj;
}
} 

Класс Event, который наследуется от RealmObject

private RealmList<EventDateTimes> datetimes;

Класс EventDateTimes:

public class EventDateTimes extends RealmObject {

private Date date;
public Date getDate() {
    return date;
}
public void setDate(Date date) {
    this.date = date;
}
}

P.S. пока что мне нужно понять, как можно сериализовать поле date. Заранее спасибо.

Answer 1

Если есть необходимость создавать JSON вручную, то это можно сделать с помощью стандартных классов JSONObject и JSONArray:

    try {
        JSONObject date1 = new JSONObject();
        date1.put("date", "2016-12-14");
        date1.put("start_time", "08:00:00");
        date1.put("end_time", "22:00:25");
        JSONObject date2 = new JSONObject();
        date2.put("date", "2016-12-15");
        date2.put("start_time", "08:00:00");
        date2.put("end_time", "22:00:25");
        JSONArray dates = new JSONArray();
        dates.put(date1);
        dates.put(date2);
        JSONObject result = new JSONObject();
        result.put("datetimes", dates);
        Log.d("happy", result.toString());
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
Answer 2

Я для сериализации исторически использую библиотеку Gson. obj из примера ниже может быть любым объектом, сериализатор создаст поля в JSON в соответствии с полями сериализуемого класса. Каждый объект в полях класса тоже будет аналогичным образом сериализован.

Gson gson = new Gson();
String json = gson.toJson(obj);  

Подключается:

compile 'com.google.code.gson:gson:2.8.0'

Документация здесь: https://sites.google.com/site/gson/gson-user-guide

Answer 3

Если проблема не в сериализаторе, а в описании данных в классах, то можно воспользоваться специальным сервисом. Например, ниже то, что генерит http://www.jsonschema2pojo.org/ на основе приведенного вами примера.

Заметьте, что в классах расставлены аннотации для сериализатора, его можно выбрать в настройках.

-----------------------------------com.example.Datetime.java----------------------------------
package com.example;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Datetime {
@SerializedName("date")
@Expose
public String date;
@SerializedName("start_time")
@Expose
public String startTime;
@SerializedName("end_time")
@Expose
public String endTime;
}
-----------------------------------com.example.Example.java-----------------------------------
package com.example;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Example {
@SerializedName("datetimes")
@Expose
public List<Datetime> datetimes = null;
}
READ ALSO
Фильтрация данных. Поиск по таблице

Фильтрация данных. Поиск по таблице

Здравствуйте, возникла проблемаУ меня есть таблица пользователей

294
Exception in thread &ldquo;main&rdquo; java.lang.ClassNotFoundException: com.softserve.edu.test1.Chess

Exception in thread “main” java.lang.ClassNotFoundException: com.softserve.edu.test1.Chess

Помогите, пожалуйста, решитьпроблему - уже третий день мучаюсь

275
Из блока catch снова вернуться в catch

Из блока catch снова вернуться в catch

Всем приветИнтересует вопрос, можно ли из блока catch снова вернуться в этот блок catch? Вот код:

311
Методы wait и notify

Методы wait и notify

В интернете нашел пример использования wait и notify:

386