2016-07-28 6 views
-2

Angenommen, dass ich eine Json-Struktur zu erhalten, wie dies versuchen:In Gson, wie füge ich ein JsonArray zu einem JsonObject hinzu?

{ 
    "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 
    ] 
} 

Einige Fragen zu diesem Json Aufbau:

  1. Wie kann ich den Namen der JsonArray angeben? Ich brauche es benannt zu werden, in der JSON, "rows".
  2. Wie kann ich die JsonArrayrows zu einer JsonObject hinzufügen (ich nehme an, das ist, was die äußeren Klammern bedeuten)?

Dies ist der Code, dass ich es tun, bin mit:

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. 

Ich brauche rows zu logs hinzuzufügen. JsonObject scheint jedoch nur .add(JsonElement) und .addProperty(String, variousTypes) zu haben, und nichts, um ein Array hinzuzufügen. Was vermisse ich?

EDIT: Ich verwende nicht Gson, um Objekte zu serialisieren, weil der Json aus Datenelementen von jedem von mehreren Protokollen besteht (und nicht einmal in der Nähe aller Informationen in jedem Protokoll).

+0

zurückgeworfen Sie Gson verwenden Warum erstellen Sie manuell JSON und verwenden keine Java-Klassenserialisierung? –

+0

@ cricket_007 Weil die Klassen nichts wie die Json aussehen, die ich baue. Siehe meine Bearbeitung. –

+0

Probieren Sie diese 'logs.add (" Zeilen ", Zeilen);' !! – Maraboc

Antwort

7

JsonArray ist eine Instanz von JsonElement. Also die Methode .add("name", element), wo Element ist ein JsonArray, sollte einfach funktionieren.

+0

aaah, schlagen Sie mich durch Sekunden! :) – Jeeter

+0

BTW, 'JsonArray' ** erweitert **' JsonElement', keine Instanz – Jeeter

+1

Ja, um ausführlicher zu sein, eine Instanz von JsonArray ist auch eine Instanz von JsonElement, aufgrund ihrer Unterklassen-/Superklassenbeziehung. – thewmo

1

Sie die Methode verwenden können JsonObject.add() eine JsonElement hinzufügen, die JsonArray Erbt von

logs.add("rows", rows) 

Und dann, wenn es aus Deserialisieren, können Sie es nur zu einem JsonArray

Verwandte Themen