2016-07-28 91 views
-2

假設我想獲得一個JSON結構是這樣的:在Gson中,如何將JsonArray添加到JsonObject?

{ 
    "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. 如何將JsonArrayrows添加到JsonObject(我假設這就是外括號的含義)?

這是我用來做它的代碼:我需要添加rowslogs

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. 

。然而,JsonObject只有似乎有.add(JsonElement).addProperty(String, variousTypes),並沒有添加任何數組。我錯過了什麼?

編輯:我不使用GSON因爲JSON是從每幾個日誌(甚至沒有靠近所有的信息在每個日誌)組成的數據項的序列化對象。

+0

您正在使用GSON ,那麼爲什麼你要手動構建JSON而不使用Java類序列化? –

+0

@ cricket_007因爲這些類看起來不像我正在建造的Json。看我的編輯。 –

+0

試試這個'logs.add(「rows」,rows);'!! – Maraboc

回答

7

JsonArrayJsonElement的一個實例。所以方法.add("name", element),其中元素是JsonArray,應該工作。

+0

aaah,打我秒! :) – Jeeter

+0

順便說一下,'JsonArray' **擴展了**'JsonElement',而不是一個實例 – Jeeter

+1

是的,更詳細的說,JsonArray的一個實例也是JsonElement的一個實例,憑藉它們的子類/超類關係。 – thewmo

1

您可以使用該方法JsonObject.add()添加JsonElement,其中JsonArray繼承:

logs.add("rows", rows) 

然後反序列化出來的時候,你可以將它轉換回一個JsonArray