【问题标题】:In Gson, how do I add a JsonArray to a JsonObject?在 Gson 中,如何将 JsonArray 添加到 JsonObject?
【发布时间】: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 的一些问题:

  1. 如何指定JsonArray 的名称?我需要在 Json 中将其命名为"rows"
  2. 如何将JsonArray rows 添加到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 我知道我错过了一些简单的东西。如果您想将其放入答案中,我会接受。
  • 您可以接受现有答案之一就可以了;)

标签: java json gson


【解决方案1】:

您可以使用JsonObject.add() 方法添加JsonElementJsonArray 继承自:

logs.add("rows", rows)

然后在反序列化时,您可以将其转换回JsonArray

【讨论】:

    【解决方案2】:

    JsonArrayJsonElement 的一个实例。所以方法.add("name", element),其中元素是JsonArray,应该可以正常工作。

    【讨论】:

    • 顺便说一句,JsonArray 扩展 JsonElement,不是实例
    • 是的,更详细一点,JsonArray 的实例也是 JsonElement 的实例,凭借它们的子类/超类关系。
    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多