У меня есть следующий класс Java
public static class LogItem {
public Long timestamp;
public Integer level;
public String topic;
public String type;
public String message;
}
, и я хочу преобразовать ArrayList<LogItem>
в следующую строку JSON:
{"logitems":[
{"timestamp":1560924642000, "level":20, "topic":"websocket", "type":"status", "message":"connected (mobile)"},
...
]}`
Я хотел бы сделать следующее:
JSONArray logitems = new JSONArray();
for (DB_LogUtils.LogItem item : items) {
logitems.put(DB_LogUtils.asJSONObject(item)); // <----
}
JSONObject data = new JSONObject();
data.put("logitems", logitems);
webViewFragment.onInjectMessage(data.toString(), null);
, где DB_LogUtils.asJSONObject
- следующий метод
public static JSONObject asJSONObject(LogItem item) throws JSONException
{
JSONObject logitem = new JSONObject();
logitem.put("timestamp", item.timestamp);
logitem.put("level", item.level);
logitem.put("topic", item.topic);
logitem.put("type", item.type);
logitem.put("message", item.message);
return logitem;
}
, но вместо того, чтобы делать это вручную (например, logitem.put("timestamp", item.timestamp);
), я хочу сделать это с Gson
, чтобыЯ хотел бы получить что-то подобное
JSONArray logitems = new JSONArray();
for (DB_LogUtils.LogItem item : items) {
logitems.put(new Gson().toJSONObject(item)); // <----
}
JSONObject data = new JSONObject();
data.put("logitems", logitems);
webViewFragment.onInjectMessage(data.toString(), null);
, чтобы не пришлось редактировать код в нескольких точках при изменении класса LogItem.
Но Gson().toJSONObject(...)
не существует, толькоGson().toJson(...)
, который возвращает String
.Я не хочу переходить в String
только для того, чтобы затем проанализировать его с org.json.JSONObject
.
. В итоге я использовал второй класс
public static class LogItems {
public List<LogItem> logitems = new ArrayList<>();
}
, который затем позволил мне изменитьвесь код к
webViewFragment.onInjectMessage(new Gson().toJson(items), null);
, где items
будет иметь тип LogItems
.
В этом случае создание дополнительного класса-оболочки было общим преимуществом, но я все еще хотел бычтобы узнать, как я могу создать такой JSONObject из класса с помощью Gson.