【发布时间】:2016-12-03 05:30:35
【问题描述】:
假设我想得到一个这样的 Json 结构:
{
"rows": [
{
"date_str": "2016-07-01",
"sleep_7_or_more_hours": true,
"activity_minutes": "0",
"water_5_or_more_cups": true,
"fruit_veg_4_or_more_servings": true,
"physical_activity_description": "walking"
}
{
"date_str": "2016-07-02",
"sleep_7_or_more_hours": true,
"activity_minutes": "30",
"water_5_or_more_cups": true,
"fruit_veg_4_or_more_servings": true,
"physical_activity_description": "walking"
}
...etc
]
}
关于构建这个 Json 的一些问题:
- 如何指定
JsonArray的名称?我需要在 Json 中将其命名为"rows"。 - 如何将
JsonArrayrows添加到JsonObject(我认为这就是外括号的意思)?
这是我用来执行此操作的代码:
JsonArray rows = new JsonArray();
//Code to get local dates omitted
for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1))
{
JsonObject row = new JsonObject();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd", Locale.ENGLISH);
String dateString = date.format(formatter);
row.addProperty("date_str", dateString);
boolean sleptLongEnough = (sleepLog.getTimeInBed(getDate(date)) > (7 * 60));
row.addProperty("sleep_7_or_more_hours", sleptLongEnough);
int activityMinutes = (activitiesLog.getMinutesVeryActive(getDate(date)) + activitiesLog.getMinutesFairlyActive(getDate(date)));
...
//Omitted extra code
rows.add(row);
}
JsonObject logs = new JsonObject();
//add rows to logs here.
我需要将rows 添加到logs。但是,JsonObject 似乎只有.add(JsonElement) 和.addProperty(String, variousTypes),并没有添加数组。我错过了什么?
编辑:我没有使用 Gson 来序列化对象,因为 Json 由来自多个日志中的每一个的数据项组成(甚至不接近每个日志中的所有信息)。
【问题讨论】:
-
你使用的是Gson,那你为什么要手动构建JSON而不使用Java类序列化?
-
@cricket_007 因为这些类看起来不像我正在构建的 Json。查看我的编辑。
-
试试这个
logs.add("rows", rows);!! -
@Maraboc 我知道我错过了一些简单的东西。如果您想将其放入答案中,我会接受。
-
您可以接受现有答案之一就可以了;)